Python格式化字符串--format

format格式化字符串方法相較于老版%格式方法的優點:
1.不需要理會數據類型的問題,在%方法中'%s'只能替代字符串類型.
2.單個參數可以多次輸出,參數順序可以不相同.
3.填充方式十分靈活,對齊方式十分強大.
4.官方推薦,%方法將會在后面的版本被淘汰.


format()方法的基本使用格式:
??<模板字符串>.format(<逗號分隔的參數>)
<模板字符串>是由一系列的槽組成,用來控制修改字符串中嵌入值出現的位置,其基本思想是將format()方法的<逗號分隔的參數>中的參數按照序號關系替換到<模板字符串>的槽中.
槽用大括號{}表示,如果大括號中沒有序號,則按照位置順序替換:

>>> print('{}:計算機{}的CPU占用率為{}%'.format('2017-09-30', 'Python', 10))
2017-09-30:計算機Python的CPU占用率為10%

如果大括號中指定了使用參數的序號,按照序號對應參數替換.參數從0開始編號:

>>> print('{1}:計算機{0}的CPU占用率為{2}%.'.format('python', '2017-09-30', 10))
2017-09-30:計算機python的CPU占用率為10%.

除了通過序號來指定填充的參數外,還可以通過關鍵字參數,下標,字典的key和對象的屬性來填充

>>> print('{date}:計算機{process}的CPU占用率為{per}%.'.format(date='2017-09-30', process='python', per=10))    # 關鍵字參數
2017-09-30:計算機python的CPU占用率為10%.
>>> print('I am {arg[0]}, I love {arg[1]}'.format(arg=arg))    # 下標
I am Liu, I love python

>>> person = {'name': 'Liu', 'age': 24, 'job': 'Pythoneer'}
>>> print('I am {person[name]}, {person[age]} years old, a {person[job]}.'.format(person=person))
I am Liu, 24 years old, a Pythoneer.

Class Person():
    def __init__(self):
        self.name, self.age, self.job = 'Liu', 24, 'Pythoneer'
>>> me = Person()
>>> print('I am {me.name}, {me.age} years old, a {me.job}'.format(me=me))
I am Liu, 24 years old, a Pythoneer.



format()方法中<模板字符串>的槽除了包含參數序號,還可以包括格式控制符.此時,槽的內部樣式如下:
???{<參數序號>:<格式控制符>}
其中,<格式控制符>用來控制參數顯示時的格式.


<格式控制符>包括:<填充><對齊><寬度>,<.精度><類型>6個字段,這些字段都是可選的,可以組合使用.
<填充>,<對齊>和<寬度>是3個相關字段.

  • <寬度>:指當前槽的設定輸出字符寬度,如果該槽對應的format()參數長度比<寬度>設定值大,則會使用實際寬度.如果該值的實際位數小于指定寬度,則位數將被默認以空格補充.
  • <對齊>:指參數在<寬度>內輸出是的對齊方式,分別使用<,>和=三個符號表示左對齊,右對齊和居中對齊.
  • <填充>:指<寬度>內除了參數外的字符采用什么方式表示,默認采用空格.
>>> s = 'PYTHON'
>>> '{:30}'.format(s)
'PYTHON                        '
>>> '{:>30}'.format(s)
'                        PYTHON'
>>> '{:*^30}'.format(s)
'************PYTHON************'
>>> '{:-^30}'.format(s)
'------------PYTHON------------'
>>> '{:5}'.format(s)
'PYTHON'
  • 逗號,:<格式控制符>中逗號(,)用于顯示數字的千位分隔符
>>> '{:-^20,}'.format(123456789)
'----123,456,789-----'
>>>'{:-^20}'.format(123456789)    #對比輸出
'-----123456789------'
>>> '{:-^20,}'.format(12345.67890)
'----12,345.6789-----'
  • <.精度>:表示兩個含義,有小數點(.)開頭.對于浮點數,精度表示小數部分輸出的有效位數.對于字符串,精度表示輸出的最大長度.
>>> '{:.2f}'.format(12345.67890)
'12345.68'
>>> '{:H^20.3f}'.format(12345.67890)
'HHHHH12345.679HHHHHH'
>>> '{:.4}'.format('PYTHON')
'PYTH'
  • <類型>:表示輸出整數和浮點數類型的格式規則.對于整數類型,輸出格式包括6中:
    ??b: 輸出整數的二進制方式;
    ??c: 輸出整數對應的Unicode字符;
    ??d: 輸出整數的十進制方式;
    ??o: 輸出整數的八進制方式;
    ??x:輸出整數的小寫十六進制方式;
    ??X:輸出整數的大寫十六進制方式;
>>> '{0:b}, {0:c}, {0:d}, {0:o}, {0:x}, {0:X}'.format(425)
'110101001, ?, 425, 651, 1a9, 1A9'

?對于浮點數類型,輸出格式包括4種:
??e: 輸出浮點數對應的小寫字母e的指數形式;
??E: 輸出浮點數對應的大寫字母E的指數形式;
??f: 輸出浮點數的標準浮點形式;
??%: 輸出浮點數的百分比形式;
浮點數輸出是盡量是用<.精度>表示小數部分的寬度,有助于更好控制輸出格式.

>>> '{0:e}, {0:E}, {0:f}, {0:%}'.format(3.14)
'3.140000e+00, 3.140000E+00, 3.140000, 314.000000%'
>>> '{0:.2e}, {0:.2E}, {0:.2f}, {0:.2%}'.format(3.14)
'3.14e+00, 3.14E+00, 3.14, 314.00%'


其他

轉義{和}符號
使用{}對大括號進行轉義

>>> 'hello {}, {{}}'.format('world')
'hello world, {}'

處理時間對象

>>> from datetime import datetime
>>> '{:%Y-%m-%d %X}'.format(datetime.now())
'2017-09-30 16:24:29'

參考官方文檔中對時間的格式化字符.
一個快捷方法

>>> a, b = 'Life', 'Python'
>>> f'{a} is short, you need '
'Life is short, you need Python'
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在python2中一直使用形如: “%s .... %d” % (str, ... , intNum)格式化字符串...
    MoraGG閱讀 1,766評論 0 1
  • 本文轉載自:http://blog.csdn.net/lonely_fireworks/article/detai...
    NeWolf閱讀 484評論 0 1
  • 過去的一年里,有什么值得驕傲的事情? 帶著三歲半的娃,第一次,參加蘇州國際馬拉松親子跑。我和娃人生里的第一個馬拉松...
    明媚Sopy閱讀 136評論 0 0
  • 談如何落實課堂教學的“五化”問題 烏晶 自教育局推進學...
    三小烏晶閱讀 408評論 0 0
  • 今天是參加百日作戰的30天,匯報一下戰果。 1、是否有持續堅持打卡? 7月23日,我一共報名參加了“從Excel到...
    Jeudi閱讀 465評論 2 4