1. 程式人生 > >Python(8)--字串格式化

Python(8)--字串格式化

字串:

  所有標準序列操作(索引、切片、乘法、成員資格檢查、長度、最小值和最大值)都適用於字串,但別忘了字串是不可變的,因此所有的元素賦值和切片賦值都是非法的。

 


 字串格式化:format方法

  每個值都被插入字串中,用來替用花括號括起來的替換欄位

  替換欄位由下面的部分組成:

  欄位名:索引或者識別符號,指出要設定哪個值的格式,並使用結果來替換該欄位;還可以指定值的特殊部分,如列表內的元素

  轉換標誌:跟在感嘆號後面的單個字元。支援的字元包括:r(表示repr)、s(表示str)、a(表示ascii)。如果指定了轉換標誌,就不會用物件本身的格式,而是用指定函式將物件轉換成字串,然後進行格式設定

  格式說明符:跟早冒號後面的表示式。讓我們能詳細的指定最終的格式,包括:格式型別、欄位寬度、數的精度、如何顯示符號、千位分隔符、各種對齊和填充方式


 

替換欄位名:  

  向format提供要設定格式的未命名引數,並在格式字串中使用,會按順序將欄位和引數配對

  可以給引數指定名稱,該引數會對應在格式字元中的欄位

>>> "{foo}{}{bar}{}".format(1, 3, bar="a", foo=5)
'51a3'

  可以通過索引來指定要在哪個欄位中使用相應的未命名引數,這樣就可以不按順序使用未命名引數

>>> "{foo}{1}{bar}{0}".format(1, 3, bar="a", foo=5)
'53a1'

  可以使用提供值中的一部分部分

>>> f = ["hello", "world"]
>>> "hi {foo[1]}".format(foo=f)
'hi world'

  可以使用句點來使用匯入模組中的方法、屬性、變數、函式(__name__獲取指定模組的名稱)

>>> import math
>>> tmp = "The {mod.__name__} module defines the value {mod.pi} for π"
>>> tmp.format( mod=math)
'The math module defines the value 3.141592653589793 for π'

  


 

基本轉換:

   使用轉換標誌設定值的格式

>>> print("{pi!s} {pi!r} {pi!a}".format(pi="π"))
π 'π' '\u03c0'

# s:str,將值建立為人易讀的普通字串
# r:repr,將值建立成給定的Python表示式
# a:ascii,建立ascii字元的表示

  將要轉換的值視為哪種型別,比如一個整數,但是要作為小數處理,就在冒號後面加上:f。要當做二進位制處理就加上:b

>>> "This number is {num}".format(num=33)
'This number is 33'
>>> "This number is {num:f}".format(num=33)
'This number is 33.000000'
>>> "This number is {num:b}".format(num=33)
'This number is 100001'

  在冒號(格式說明符)後面使用型別說明符,型別說明符有:

b                # 將整數表示為二進位制數
c                # 將整數解讀為Unicode碼點
d                #將整數視為十進位制數進行處理,這是整數預設使用的說明符
e                # 使用科學計數法來表示小數(e表示指數)
E                # 與e相同,但是使用E來表示指數
f                # 將小數表示為定點小數
F                # 與f相同,但是對於特殊值(nan和inf),使用大寫表示
g                #自動在定點表示和科學計數表示之間做出選擇;這是預設用於小數的說明符,預設情況下至少有一位小數
G                #與g相同,但使用大寫來表示指數和特殊值
n                # 與g相同,但插入隨區域而異的數字分隔符
o                # 將整數表示為八進位制數
s                # 保持字串的格式不變,預設用於字串的說明符
x                # 將整數表示為十六進位制數並使用小寫字母
X                # 與x相同,但使用大寫字母
%                # 將數表示為百分比值(乘以100,按說明符f設定格式,再在後面加上%)

  


 寬度:

  寬度使用整數指定

>>> "{num:10}".format(num=3)
'         3'
>>> "{name:10}".format(name="bone")
'bone      '

# 可見數字是右對齊進行空位填充,字串是左對齊進行填充

 


精度:

  設定浮點數格式預設保留6位小數,要更改序要設定精度

  精度使用整數指定,要在整數前面加上句點號:.

>>> "This number is {num:.2f}".format(num=33.345678)
'This number is 33.35'

# 可以同時指定寬度和精度
>>> "This number is {num:10.2f}".format(num=33.345678)
'This number is      33.35'

  


千位分隔符:

  使用逗號新增

>>> "number is {:,}".format(10**100)
'number is 10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000'

  同時指定其他格式設定時,逗號要放在表示寬度和表示精度的句點之間

 "number is {:12.2f}".format(99999999)
'number is  99999999.00'
>>> "number is {:12,.2f}".format(99999999)
'number is 99,999,999.00'

  


 對齊和填充:

  字串和數字預設的對齊方式不同,若要修改對齊方式,可以在指定寬度和精度的數前面新增一個標誌

# 左對齊:<
# 右對齊:>
# 居中:^
>>> print("{0:<10.2f}\n{0:>10.2f}\n{0:^10.2f}".format(3.1415926))
3.14
      3.14
   3.14

  可以指定填充字元來替代預設的空格

>>> "{:#^16}".format("go")
'#######go#######'

  等於號:=;用來將填充的字元放在符號和數字之間

>>> "{:=16.2f}".format(-3.1415)
'-           3.14'
>>> "{:#=16.2f}".format(-3.1415)
'-###########3.14'

  給正數加上說明符,放在對齊說明符後面

# 預設設定,符號是:-
>>> print("{0:.2}\n{1:.2}".format(3.1415, -3.1415))
3.1
-3.1
>>> print("{0:-.2}\n{1:-.2}".format(3.1415, -3.1415))
3.1
-3.1

# 改為+號
>>> print("{0:+.2}\n{1:+.2}".format(3.1415, -3.1415))
+3.1
-3.1

# 指定為空格
>>> print("{0: .2}\n{1: .2}".format(3.1415, -3.1415))
 3.1
-3.1

  井號:#;將其放在符號說明符和寬度之間,將處罰一種轉換方式,隨型別而異

# 對於二進位制、八進位制、十六進位制會加字首
>>> "{:b}".format(42)
'101010'
>>> "{:#b}".format(42)
'0b101010'

# 對於十進位制,必須包含小數點(g型別保留小數點後的0)
>>> "{:g}".format(42)
'42'
>>> "{:#g}".format(42)
'42.0000'