<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          55個(gè)案例:吃透Python字符串格式化

          共 11650字,需瀏覽 24分鐘

           ·

          2021-07-21 14:11

          ↑↑↑關(guān)注后"星標(biāo)"簡說Python

          人人都可以簡單入門Python、爬蟲、數(shù)據(jù)分析
           簡說Python推薦 

          來源:尤而小屋

          作者:Peter

          大家好,我是老表~

          本文中介紹的字符串一個(gè)非常重要的知識點(diǎn):字符串格式化輸出。

          格式化怎么理解?簡答來說:就是讓字符串按照我們設(shè)定的格式來輸出,達(dá)到我們想要的結(jié)果。主要是有4種方式:

          • %:基于占位符的格式化
          • format()函數(shù)的格式化:重點(diǎn)掌握
          • f-string格式化:重點(diǎn)掌握
          • 字符串模板函數(shù)string template

          一、占位符%

          常見格式符

          格式化符號其實(shí)是為真實(shí)的值預(yù)留出一個(gè)空位,而且還可以控制顯示的格式。格式符包含一個(gè)類型碼,用來顯示不同的數(shù)據(jù)類型,比如字符串、二進(jìn)制、指數(shù)等。常見的不同的占位符如下:

          • %s:   字符串 (采用str()的顯示),常用
          • %r:   字符串 (采用repr()的顯示)
          • %c:   單個(gè)字符,格式化字符及其ASCII碼
          • %b:   二進(jìn)制整數(shù)
          • %u:   格式化無符號整數(shù),常用
          • %d:   格式化十進(jìn)制整數(shù),常用
          • %i:   十進(jìn)制整數(shù)
          • %o:   八進(jìn)制整數(shù)
          • %x:   十六進(jìn)制整數(shù)
          • %g:   指數(shù)(e)或浮點(diǎn)數(shù)%f (根據(jù)顯示長度)
          • %G:   指數(shù)(E)或浮點(diǎn)數(shù)%F (根據(jù)顯示長度)
          • %e:   指數(shù) (基底寫為e),用科學(xué)計(jì)數(shù)法格式化浮點(diǎn)數(shù)
          • %E:   指數(shù) (基底寫為E),用法同%e
          • %f:   浮點(diǎn)數(shù),格式化浮點(diǎn)數(shù)字,可以指定小數(shù)點(diǎn)后面的精度,常用
          • %F:   浮點(diǎn)數(shù),與%f相同
          • %%:   字符“%”,用來顯示百分號%

          對齊問題

          關(guān)于對齊問題:

          1. ^:居中對齊
          2. >:右對齊
          3. <:左對齊
          4. +、-:顯示正負(fù)號

          語法形式

          常用的語法形式為:%[(name)][flags][width].[precision] typecode

          • (name):參數(shù)的名稱,可以省略;如果使用必須加上()
          • flags:對齊標(biāo)志位;可以是+、-、“”、0;+右對齊,-左對齊,""填充一個(gè)空格;0表示左側(cè)使用0填充
          • width:顯示的寬度
          • precision:小數(shù)點(diǎn)后的精度

          多種類型連用

          print("%9.3f" % 2.3)  
              2.300  #  前面4個(gè)空格
          • 第一個(gè) % 后面的內(nèi)容為顯示的格式說明,9 為顯示寬度,3 為小數(shù)點(diǎn)位數(shù),f 表示輸出為浮點(diǎn)數(shù)類型
          • 第二個(gè) % 后面為顯示的內(nèi)容來源,輸出結(jié)果默認(rèn)為右對齊,2.300 長度為 5,故前面有4個(gè)空格
          print("%+9.3f" % 2.3)  # 帶上+符號輸出,9表示寬度,3表示小數(shù)位
             +2.300
          print("%-9.3f" % 2.3)  # -表示左對齊輸出
          2.300
          print("%-9.3f" % -2.3)  
          -2.300
          # 我們顯示聲明3個(gè)變量

          name = "Yule Cottage"  # 字符串類型
          age = 25  # 整數(shù)類型
          height = 1.76   # 浮點(diǎn)數(shù)類型
          # 1、浮點(diǎn)數(shù)默認(rèn)是6位小數(shù)
          # 2、%f和%F相同

          print("我是:%s,年齡: %d,身高是:%f" % (name,age,height))
          我是:Yule Cottage,年齡: 25,身高是:1.760000
          # 指定浮點(diǎn)數(shù)的小數(shù)位

          print("我是:%s,年齡: %d,身高是:%.3f" % (name,age,height))
          我是:Yule Cottage,年齡: 25,身高是:1.760

          下面的代碼是通過字典對的形式來傳入不同的數(shù)據(jù)類型,字典(后面會介紹python的字典)的值就是待格式的內(nèi)容。

          需要注意的是name、age、height必須寫在%號的后面

          print("我是:%(name)s,年齡: %(age)d,身高是:%(height).3f" % {"name":name,"age":age,"height":height})
          我是:Yule Cottage,年齡: 25,身高是:1.760

          輸出不同進(jìn)制

          print("八進(jìn)制:%o,十進(jìn)制:%i,十六進(jìn)制:%x" %(age,age,age))
          八進(jìn)制:31,十進(jìn)制:25,十六進(jìn)制:19
          # print("二進(jìn)制:%b" %(age))   # 二進(jìn)制不能使用
          bin(age)  # 通過bin函數(shù)查看
          '0b11001'

          輸出的寬度、精度等設(shè)置

          number = 1.23456789

          # 寬度為10,保留小數(shù)點(diǎn)后4位,默認(rèn)是右對齊
          print("%10.4f" % number)  
              1.2346
          print("%-10.4f" % number)  # -符號表示左對齊,顯示4位小數(shù)
          1.2346
          # 右對齊,保留10位小數(shù),不足的用0補(bǔ)齊

          print("%10.10f" % number)  
          1.2345678900
          print("%-10.8f" % number)  # 左對齊,保留8位小數(shù)
          1.23456789
          # 左對齊,保留7位小數(shù),會自動(dòng)地進(jìn)行四舍五入

          print("%-10.7f" % number)  
          1.2345679

          下面是針對字符串的寬度等輸出設(shè)置:

          name
          'Yule Cottage'
          print("%.10s" % name) # 9個(gè)字母+一個(gè)空格:左對齊
          Yule Cotta
          print("%.15s" % name) # 如果位數(shù)不夠,直接全部輸出
          Yule Cottage
          print("%10.6s" % name) # 右對齊,取出6個(gè)字符
              Yule C

          解釋:總長度為10,前面4個(gè)空格,加上4+一個(gè)空格+C

          二、format格式化

          從python2.6+開始,新增了一種格式化字符串的函數(shù)str.format,可以說極大地增強(qiáng)了字符串格式化的功能,基本語法是通過{}:來代替占位符%

          • 接收多個(gè)不限制的參數(shù)
          • 位置可以不按照順序

          語法形式

          {<參數(shù)序號>:<格式控制標(biāo)記>} ,中間有一個(gè)冒號,不能省略!!!

          name = "Yule Cottage"  # 字符串類型
          age = 25  # 整數(shù)類型
          height = 1.76   # 浮點(diǎn)數(shù)類型
          sex = "男"

          多個(gè)參數(shù)連用

          # 1、不設(shè)置位置
          print("名字是:{},年齡是:{},身高是:{},性別:{}".format(name,age,height,sex))
          名字是:Yule Cottage,年齡是:25,身高是:1.76,性別:男
          # 2、設(shè)置位置參數(shù)

          print("名字是:{0},年齡是:{1},身高是:{2},性別:{3}".format(name,age,height,sex))
          名字是:Yule Cottage,年齡是:25,身高是:1.76,性別:男
          # 設(shè)置位置參數(shù)
          # 索引從0開始;2號位對應(yīng)的height

          print("名字是:{0},身高是:{2},年齡是:{1},性別:{3}".format(name,age,height,sex))
          名字是:Yule Cottage,身高是:1.76,年齡是:25,性別:男
          print("性別:{3},身高是:{2},名字是:{0},年齡是:{1}".format(name,age,height,sex))
          性別:男,身高是:1.76,名字是:Yule Cottage,年齡是:25
          # 3、元組形式
          # 使用*進(jìn)行解析

          information = ("Peter",25)

          print("姓名是:{},年齡是:{}".format(*information))
          姓名是:Peter,年齡是:25
          # 4、字典形式
          # 參數(shù)為字典時(shí)候,通過**進(jìn)行解析配對

          print("名字是:{name},年齡是:{age},身高是:{height},性別:{sex}".format(**{"name":name,"age":age,"height":height,"sex":sex}))
          名字是:Yule Cottage,年齡是:25,身高是:1.76,性別:男
          # 5、直接變量賦值

          print("名字是:{name},年齡是:{age},身高是:{height},性別:{sex}".format(name="Yule Cottage",age="2歲",height="1.75m",sex="男"))
          名字是:Yule Cottage,年齡是:2歲,身高是:1.75m,性別:男

          對齊

          寬度為20,我們實(shí)現(xiàn)居中、靠左、靠右對齊

          name
          'Yule Cottage'
          print("{:^20s}".format(name))  # 居中
          print("{:>20s}".format(name))  # 靠右
          print("{:<20s}".format(name))  # 靠左
              Yule Cottage    
          Yule Cottage
          Yule Cottage

          數(shù)值多種形式

          首先我們還是看看對齊問題,浮點(diǎn)數(shù)的對齊只保留6位小數(shù):

          pi = 3.1415926

          print("{:^20f}".format(pi))  # 居中  # 默認(rèn)只保留6位小數(shù)
          print("{:>20f}".format(pi))  # 靠右
          print("{:<20f}".format(pi))  # 靠左
                3.141593      
          3.141593
          3.141593

          看看不同情況下的輸出格式,浮點(diǎn)數(shù)需要帶上小數(shù)點(diǎn),默認(rèn)全部是左對齊:

          # 不同的輸出方式

          print("{}".format(pi))  # 原數(shù)據(jù)
          print("{:.2f}".format(pi))   # 2位小數(shù)
          print("{:>.10f}".format(pi))  # 位數(shù)不足,右側(cè)補(bǔ)0
          print("{:.4%}".format(pi))  # 百分比輸出
          print("{:.2e}".format(pi))
          3.1415926
          3.14
          3.1415926000
          314.1593%
          3.14e+00

          填充

          sex
          '男'
          print("{0:30}".format(sex))  # 字符串默認(rèn)左對齊
          print("{:>30}".format(sex))  # 改成右對齊
          print("{0:30}".format(age))  # 數(shù)值類型默認(rèn)右對齊
          print("{:<30}".format(height)) # 改成左對齊


          25
          1.76
          # 指定填充的字符

          print("{:*>30}".format(sex))  # *
          print("{:+>30}".format(sex))  # +
          print("{:+^30}".format(sex))  # 居中后填充+
          print("{:+<30}".format(height)) # +
          *****************************男
          +++++++++++++++++++++++++++++男
          ++++++++++++++男+++++++++++++++
          1.76++++++++++++++++++++++++++

          千位分隔符

          主要是用來顯示數(shù)字的千位分隔符,在貨幣金額中使用的比較多:

          b = 1003005000600

          print("{:-^20}".format(b))   # 不用逗號
          print("{:-^20,}".format(b))  # 用逗號
          ---1003005000600----
          -1,003,005,000,600--
          # 小數(shù)的千位分隔符顯示

          print("{0:-20,}".format(12567.98760))  # 不填充
          print("{0:-^20,}".format(12567.98760))  # 居中+填充
          print("{0:->20,}".format(12567.98760))  # 右對齊+填充
          print("{0:-<20,}".format(12567.98760))  # 左對齊+填充
                   12,567.9876
          ----12,567.9876-----
          ---------12,567.9876
          12,567.9876---------

          精度

          精度輸出的時(shí)候前面必須有一個(gè)小數(shù)點(diǎn)開頭,具有兩層含義:

          • 浮點(diǎn)數(shù):表示輸出小數(shù)位的有效位數(shù)
          • 字符串:精度表示輸出的最大長度
          pi
          3.1415926
          "{:.3f}".format(pi)
          '3.142'
          "{:30.5f}".format(pi)  # 小數(shù)點(diǎn)后5位,整體寬度30
          '                       3.14159'
          "{:*^30.5f}".format(pi)  # 小數(shù)點(diǎn)后5位,寬度30,居中后補(bǔ)充*
          '***********3.14159************'
          name
          'Yule Cottage'
          "{:.4}".format(name)  # 最大長度為4
          'Yule'
          "{:.6}".format(name)  # 輸出最大長度為6
          'Yule C'

          多種輸出類型

          表示輸出整數(shù)和浮點(diǎn)數(shù)類型的格式規(guī)則。對于整數(shù)類型,輸出格式包括6 種:

          • c: 輸出整數(shù)對應(yīng)的 Unicode 字符;
          • b: 輸出整數(shù)的二進(jìn)制方式;
          • o: 輸出整數(shù)的八進(jìn)制方式;
          • d: 輸出整數(shù)的十進(jìn)制方式;
          • x: 輸出整數(shù)的小寫十六進(jìn)制方式;
          • X: 輸出整數(shù)的大寫十六進(jìn)制方式;

          下面的例子表示的是365的二進(jìn)制、Unicode字符、十進(jìn)制、小寫16進(jìn)制和大寫的16進(jìn)制的不同輸出格式:

          "{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(365)
          '101101101,?,365,555,16d,16D'

          如果是浮點(diǎn)數(shù)類型,那么輸出格式包括4種:

          • e: 輸出浮點(diǎn)數(shù)對應(yīng)的小寫字母 e 的指數(shù)形式;
          • E: 輸出浮點(diǎn)數(shù)對應(yīng)的大寫字母 E 的指數(shù)形式;
          • f: 輸出浮點(diǎn)數(shù)的標(biāo)準(zhǔn)浮點(diǎn)形式;
          • %: 輸出浮點(diǎn)數(shù)的百分形式。

          浮點(diǎn)數(shù)輸出時(shí)盡量使用<.精度>表示小數(shù)部分的寬度,有助于更好控制輸出格式。

          "{0:e},{0:E}".format(3.1415)
          '3.141500e+00,3.141500E+00'
          "{0:f},{0:F}".format(3.1415)
          '3.141500,3.141500'
          "{0:%}".format(3.1415)  # 保留6位小數(shù),百分比輸出
          '314.150000%'
          "{0:.2%}".format(3.1415)  # 2位小數(shù),百分比輸出
          '314.15%'

          三、f-string

          f-string是python3.6開始引入的新字符串格式化方法。其實(shí)它的方法很多和format是類似的,下面通過具體的例子來講解。

          簡單例子

          首先我們看一個(gè)簡單的例子,說明f-string如何使用:

          a = "hello"
          b = "python"

          f"{a} {b}"
          'hello python'

          指定變量格式化

          # 我們顯示聲明3個(gè)變量

          name = "Yule Cottage"  # 字符串類型
          age = 25  # 整數(shù)類型
          height = 1.76   # 浮點(diǎn)數(shù)類型
          f'名字是:{name},年齡是:{age},身高是:{height}'  # 前面加上f
          '名字是:Yule Cottage,年齡是:25,身高是:1.76'

          我們和format進(jìn)行一下對比:

          "名字是:{},年齡是:{},身高是:{}".format(name,age,height)  # format函數(shù)在最后面
          '名字是:Yule Cottage,年齡是:25,身高是:1.76'

          指定表達(dá)式格式化

          如果后面的string部分是表達(dá)式,也可以進(jìn)行格式化

          f'{1+2+3}'
          '6'
          f'{1*2*3*4}'
          '24'

          對表達(dá)式進(jìn)行變量的賦值再格式化:

          x = 100
          y = 50

          f"{x*y + x/y}"  # 100*50 + 100 / 50 結(jié)果是浮點(diǎn)數(shù)
          '5002.0'

          指定函數(shù)格式化

          上面的例子是直接賦值再通過表達(dá)式來格式化,我們其實(shí)可以將上面的表達(dá)式改成函數(shù),傳入?yún)?shù)來格式化,函數(shù)可以是:

          • python自帶的函數(shù)
          • 自定義的函數(shù)
          # 自帶函數(shù)
          print(f'my name is: {name}')  # 原數(shù)據(jù)
          print(f'my name is: {name.upper()}')  # 全部變成大寫字母
          my name is: Yule Cottage
          my name is: YULE COTTAGE
          # 自己寫個(gè)函數(shù)

          def test(a,b):
              return a * b + a / b

          f'{test(100,50)}'
          '5002.0'
          # 或者直接寫成lambda 匿名函數(shù)

          f'執(zhí)行的結(jié)果是:{(lambda x,y: x*y + x/y)(100,50)}'
          '執(zhí)行的結(jié)果是:5002.0'

          對齊

          • <:靠左,字符串默認(rèn)方式
          • >:靠右,數(shù)值類型默認(rèn)方式
          • ^:居中
          print(f'{name}')  # 字符串默認(rèn)左
          print(f'{name:>20.10s}')  # > 右對齊 長度20  字符串最大長度10
          print(f'{name:<20.12s}')  # < 左對齊 長度20  字符串最大長度12 
          Yule Cottage
          Yule Cotta
          Yule Cottage
          pi = 3.1415926

          print(f'{pi}')  # 原數(shù)據(jù)
          print(f'{pi:^10.4f}')  # 居中 長度為10  保留4位小數(shù)
          print(f'{pi:>10.4f}')  # 靠右 長度為10  保留4位小數(shù)
          print(f'{pi:<10.4f}')  # 靠左 長度為10  保留3位小數(shù)
          3.1415926
          3.1416
          3.1416
          3.1416

          填充

          print(f'{pi}')  # 原數(shù)據(jù)

          print(f'{pi:*^10.4f}')  # 填充*:居中 長度為10  保留4位小數(shù)
          print(f'{pi:*>10.4f}')  # 填充*:靠右 長度為10  保留4位小數(shù)
          print(f'{pi:*<10.4f}')  # 填充*:靠左 長度為10  保留3位小數(shù)
          3.1415926
          **3.1416**
          ****3.1416
          3.1416****

          千位分隔符

          和format中的千位分隔符相同,主要是用于金融貨幣中,自帶金錢屬性呀。可以使用逗號或者其他符號,常用逗號:

          money = 1234567890

          print(f'{money:,f}')  # 輸出保留6位小數(shù)
          1,234,567,890.000000
          print(f'{money:_f}')   # 使用下滑線
          1_234_567_890.000000

          四、字符串模板string template

          string.Template是將一個(gè)string設(shè)置為模板,通過替換變量的方法,最終得到想要的string

          from string import Template  # 導(dǎo)入模板

          template_string = '$name is $sex'

          s = Template('$name is $sex')
          s.substitute(name="Peter",sex="male")
          'Peter is male'
          from string import Template  # 導(dǎo)入模板

          template_string = '$name is $sex'  # 1、設(shè)置模板
          s = Template(template_string)  

          dic = {"name":"Peter","sex":"male"}

          s.substitute(dic)
          'Peter is male'

          在上面的例子中:

          • 模板s中有以$符號說明模板中有兩個(gè)變量名,用實(shí)際的變量來替換。

          • 格式是dictionary,并且字典中的key值與模板中的變量名要保持一致

          • string.Template默認(rèn)用$符號來標(biāo)識出變量;可以進(jìn)行修改

          from string import Template
          class MyTemplate(Template):     
              delimiter = '%'
          ...     
          s = MyTemplate('%who knows?')  # 改變符號
          s.substitute(who='Peter')
          'Peter knows?'

          五、格式整理

          整理下關(guān)于對齊、精度、數(shù)值類型的符號等知識點(diǎn):

          對齊

          1. <:右對齊(數(shù)值默認(rèn)對齊方式)
          2. >:左對齊(字符串默認(rèn)對齊方式)
          3. ^:居中

          符號

          1. +:負(fù)數(shù)前加負(fù)號(-),正數(shù)前加正號(+)
          2. -:負(fù)數(shù)前加負(fù)號(-),正數(shù)前不加任何符號(默認(rèn))
          3. 空格:負(fù)數(shù)前加負(fù)號(-),正數(shù)前加一個(gè)空格

          寬度和精度

          • width:指定寬度為width
          • width.precision:寬度為width,精度為precision
          • 0width:寬度為width,指定高位用0補(bǔ)足寬度

          六、總結(jié)

          1、%占位符

          表達(dá)式比較直觀,容易上手;但是當(dāng)參數(shù)變多的時(shí)候,格式就變得繁瑣,這種方式現(xiàn)在幾乎淘汰

          2、format函數(shù)

          方法比較靈活,能夠自己設(shè)置參數(shù)來對應(yīng)相應(yīng)的變量;參數(shù)變多的時(shí)候,表達(dá)式同樣繁瑣,整個(gè)式子會非常長

          3、f-string

          相對前兩種方式會靈活些,也更直觀。Python3.6開始出現(xiàn),語句格式可能稍顯復(fù)雜

          重點(diǎn)還是要掌握format函數(shù)和f-string



          --END--

          老表薦書

          圖書介紹Python自動(dòng)化辦公:3分鐘完成一天工作本書理論知識精練、代碼簡單、思路清晰、學(xué)習(xí)資源齊備,適合有一定辦公軟件使用基礎(chǔ)又想進(jìn)一步提高工作效率的辦公人員,如從事行政、人事、營銷、財(cái)務(wù)等職業(yè)的人士閱讀,也可供Python編程愛好者參考。

          • 零基礎(chǔ)自學(xué)Python編程

          • 迅速掌握Office(Word、PPT、Excel)自動(dòng)化、數(shù)據(jù)處理、網(wǎng)絡(luò)爬蟲

          • 高效、精進(jìn)工作,職場逆襲

          • 附贈(zèng)視頻、源代碼、在線答疑

          (五折包郵,快快掃碼搶購吧!)



          掃碼即可加我微信

          老表朋友圈經(jīng)常有贈(zèng)書/紅包福利活動(dòng)


          學(xué)習(xí)更多:
          整理了我開始分享學(xué)習(xí)筆記到現(xiàn)在超過250篇優(yōu)質(zhì)文章,涵蓋數(shù)據(jù)分析、爬蟲、機(jī)器學(xué)習(xí)等方面,別再說不知道該從哪開始,實(shí)戰(zhàn)哪里找了

          優(yōu)秀的讀者都知道,“點(diǎn)贊”傳統(tǒng)美德不能丟 

          瀏覽 26
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  我要看操逼的片子能给我播放吗谢谢 | 大香蕉视频在伊98 | 日本二区三区黄色 | 欧美怡红院一区二区三区 | 污视频在线观看免费 |