返回目錄html
字符串屬於不可變序列,只能生成新的,不能改變舊的。「字符串格式化」有點像之前C語言的sprintf,能夠將若干變量代入格式化的字符串,生成一個符合要求的新字符串。python
轉換字符 | 簡述 | 舉例或說明 |
---|---|---|
%d | 十進制整數 | 'num: %d' %16 # 結果爲 'num: 16'函數 |
%o | 八進制整數 | 'num: %o' %16 # 結果爲 'num: 20'ui |
%x, %X | 十六進制整數(大小寫影響輸出字母) | 'num: %x' %31 # 結果爲 'num: 1f'(小寫)spa 'num: %X' %31 # 結果爲 'num: 1F'(大寫)code |
%f, %F | 浮點數,默認輸出6位小數(不區分大小寫) | 'num: %f' %3.14 # 結果爲 'num: 3.140000'orm |
%e, %E | 用科學計數法表示的浮點數(大小寫影響輸出字母) | 'num: %e' %314 # 結果爲 'num: 3.140000e+02'htm 'num: %E' %314 # 結果爲 'num: 3.140000E+02'對象 |
%g, %G | 若「指數<-4」或「指數>5」則和%e,%E相同,不然同%f,%F(大小寫影響輸出字母) | 'num: %g' %3140000 # 結果爲 'num: 3.140000e+06'blog 'num: %g' %314 # 結果爲 'num: 314' |
%s | 字符串或任意可用str()生成字符串的對象 | 'a %s' %'box' # 結果爲 'a box' 'a %s' %[1,2] # 結果爲 'a [1,2]' |
%r | 同上,只不過用repr()去生成字符串 | 'a %r' %'box' # 結果爲 "a 'box'" |
%c | 用ascii碼數字去生成單個字符 | 'char is %c' %97 # 結果爲 'char is a' 'char is %c' %0x61 # 結果爲 'char is a' |
%% | 轉義%(百分號) | '50 %%' # 結果爲 '50 %' |
%(鍵名)轉換字符 | 指定的鍵必須出如今後面的字典中,若不存在則引起KeyError錯誤 | '%(a)d' %{'a':1} # 結果爲 '1',注意:轉換字符d不要漏掉 |
「修飾符」能夠插入上面的%和字母之間,用以更精確地控制輸出字符串的格式,若干個修飾符可組合一塊兒使用。
修飾符 | 簡述 | 舉例或說明 |
---|---|---|
數字 | 指定被修飾對象的最小寬度(默認右對齊) | 'a%5d' %3 # 結果爲 'a 3' (數字3前面有4個空格) 'a%5s' %'bc' # 結果爲 'a bc' (bc前面有3個空格) |
- | 表示左對齊 | 'a%-5d' %3 # 結果爲 'a3 ' (數字3後面有4個空格) 'a%-5s' %'bc' # 結果爲 'abc ' (bc後面有3個空格) |
+ | 若被修飾對象爲正數,則數字前生成加號 | 'a%+5d' %3 # 結果爲 'a +3' (數字+3前面有3個空格) 'a%-+5d' %3 # 結果爲 'a+3 ' (左對齊,+3後有3個空格) |
空格 | 若被修飾對象爲正數,則數字前保留一個空格 | 'a% 5d' %3 # 結果爲 'a 3' (' 3'後面有3個空格) 'a%-+5d' %3 # 結果爲 'a 3 ' (' 3'後有3個空格) |
0 | 若被修飾對象爲數字且爲右對齊,則在數字前用0代替空格填充 | 'a%+05d' %3 # 結果爲 'a+0003' (%+05d的總寬度仍爲5) |
.數字 | 若被修飾對象爲浮點數,則表示小數點後顯示位數;若爲字符串,則表示字符串的最大寬度 | '%8.2f' %3.1415 # 結果爲 ' 3.14' '# 上例含義爲:總寬度爲8,小數點後保留2位小數,故3.14前有4個空格 |
* | 能夠在指定格式數字(寬度、小數位數等)時,用*字符代替直接數字,而後在後面的變量中給出數值 | a = 8; b = 2 '%*.*f' %(3.14,a,b) # 結果爲 ' 3.14' |
經過在字符串對象上調用format()方法來進行字符串格式化,使字符串格式化的語法更加規範。除了一些極其簡單的狀況外,通常推薦用format()這種方式來進行字符串格式化。
● 基本用法
如下在字符串內花括號中的內容稱爲「佔位符」。
用法 | 簡述 | 舉例或說明 |
---|---|---|
{數字} | 位置參數方式,花括號中的佔位符指明後面數據出現的位置(從0開始) | '{0} {1} is {2}'.format('a','b',3.14) # 結果爲 'a b is 3.14' |
{參數名} | 關鍵字參數方式,花括號中佔位符指明後面數據的關鍵字參數 | '{name} is {age}'.format(name='Tom',age=6) # 結果爲 'Tom is 6' |
聯合使用 | 根據函數入參規則,全部位置數據必須出如今關鍵字參數前面 | '{0} plus {1} is {ans}, {name}!'.format(1,5,ans=6,name='Tom') # 結果爲 '1 plus 5 is 6, Tom!' |
擴展使用 | 佔位符還能夠進行序列索引、字典鍵名、對象屬性查找,用法見右邊各例。 | '{0[2]}'.format([1,2,3]) # 序列索引,結果爲 '3' '{li[2]}'.format(li=(1,2,3)) # 序列索引,結果爲 '3' '{0[a]}'.format({'a':1}) # 字典鍵名索引,結果爲 '1' '{0.attr}'.format(obj) # 取出對象的屬性,假設 obj對象具備屬性attr |
{{, }} | 若是要在字符串中表示花括號自己,則須要打上2個花括號 | '{{abc}}'.format() # 結果爲 '{abc}' |
● 格式說明符
可使用格式說明符,對輸出進行更加精確的控制。方法是用一個冒號給每一個佔位符添加格式說明,即 {佔位符 :格式說明符 } 的形式。「格式說明符」的基本語法以下:
[ [fill] align] [sign] [0] [width] [group_option] [.precision] [type]
上面 [] 中的每一個說明符都是可選的,各說明符的含義和用例見下表:
說明符 | 簡述 | 舉例或說明 |
---|---|---|
fill | fill必須align一塊兒使用,用來指定填充字符。 | '{0:*^9}'.format('abc') # 結果爲 '***abc***' # 其中,*爲填充字符,^表示居中對齊,9爲指定寬度 |
align | 對齊方式(默認數字爲右對齊,字符串爲左對齊),可取值爲:<, >, ^,分別表示:左對齊、右對齊、居中對齊。 | '{0:5}'.format('abc') # 結果爲 'abc ' '{0:>5}'.format('abc') # 結果爲 ' abc' '{0:^5}'.format('abc') # 結果爲 ' abc ' |
sign | 可取值爲:+, -, 空格。「+」表示全部數字前都要加上符號,「-」表示只在負數前加符號(默認值),「空格」表示在正數前面加一個空格。 | '{0:+}'.format(3.14) # 結果爲 '+3.14' |
0 | 用0來填充數字前面的空白,對字符串不起做用 | '{0:+08}'.format(3.14) # 結果爲 '+0003.14' |
width | 指明寬度 | '{0:8}'.format(3.14) # 結果爲 ' 3.14' '{0:8}'.format('abc') # 結果爲 'abc ' |
group_option | 千分位分隔,取值可爲「,」或「_」(下劃線爲Python3.6新增,可用來表示2、8、十六進制的每4位分隔。) | '{0:,}'.format(12345678) # 結果爲 '12,345,678' '{0:_b}'.format(0xA5) # 結果爲 '1010_0101' |
.precision | 浮點數要顯示的位數,後面需跟type爲f或e,不然不起做用。 | '{0:.4f}'.format(3.14) # 結果爲 '3.1400' '{0:.4e}'.format(3.14) # 結果爲 '3.1400e+00' |
type | 輔助聲明「說明符」的數據類型,可取值範圍見下表。(默認:字符串爲s、整數爲d、小數爲f) | type各值舉例見下表 |
● type取值範圍
字符 | 簡述 | 舉例或說明 |
---|---|---|
d, i | 十進制整數 | '{0:d}'.format(10) # 結果爲 '10' |
b | 二進制整數 | '{0:b}'.format(10) # 結果爲 '1010' |
o | 八進制整數 | '{0:o}'.format(10) # 結果爲 '12' |
x, X | 十六進制整數(大小寫影響輸出字母) | '{0:x}'.format(10) # 結果爲 'a' '{0:X}'.format(10) # 結果爲 'A' |
f, F | 浮點數(默認顯示6位小數) | '{0:f}'.format(3.14) # 結果爲 '3.140000' |
e, E | 科學計數法表示(大小寫影響輸出字母) | '{0:e}'.format(3.14) # 結果爲 '3.140000e+00' '{0:E}'.format(3.14) # 結果爲 '3.140000E+00' |
g, G | 若「指數<-4」或「指數>5」則和g,G相同,不然同f,F(且不會去填滿小數6位) | '{0:g}'.format(3.14) # 結果爲 '3.14' |
% | 把一個數乘以100,並在後面加上百分號 | '{0:%}'.format(3.14) # 結果爲 '314.000000%' |
s | 表示字符串 | '{0:s}'.format('abc') # 結果爲 'abc' |
c | 用ascii碼數字去生成單個字符 | '{0:c}'.fomrat(97) # 結果爲 'a' |
● 用參數代入說明符
說明符一樣能夠用format()函數的輸入參數來代入,但只能嵌套一層深度,用法舉例見下:
>>> '{0:{w}}'.fomrat('a',w=3) # 結果爲 'a ' (將{w}用後面的參數w=3代入,變爲'{0:3}' >>> '{0:.{1}f}'.format(3.14,4) # 結果爲 '3.1400' (將{1}用後面的第二個參數4代入,變爲'{0:.4f}')
● 多行字符串
通常字符串若要換行,可使用反斜槓「\」來換行,反斜槓不只能用於字符串,程序代碼中亦可以使用反斜槓來換行。
s = "This is a multiline \ string using backslash."
對於使用反斜槓換行的字符來講,Python不會在其中插入「\n」換行符。
若是真的要表示大段的多行字符串,能夠用三個雙引號或三個單引號來表示,且沒必要使用反斜槓。其中可自由使用單引號、雙引號,而沒必要使用轉義斜槓。
s = """The 1st line. The 2nd line. The 3rd line. ... """
Python會在其中換行處,自動添加插入「\n」換行符。
● 原始字符串
若是字符串中要使用大量的轉義反斜槓,能夠用「原始字符串」(前加關鍵字r)。在原始字符串中,全部特殊符號均不轉義。
s = "C:\\dir\\subdir1\subdir2"
# 能夠寫成
s = r"C:\dir\subdir1\subdir2"
注意:「原始字符串」的結尾不能用反斜槓!
● 附:經常使用轉義字符
轉義字符 | 描述 | 轉義字符 | 描述 |
---|---|---|---|
\ | 續行符 | \\ | 反斜槓 |
\' | 單引號 | \" | 雙引號 |
\a | Bell(響鈴符) | \b | 退格符 |
\e | Esc | \0 | Null(空值) |
\t | 水平製表符 | \v | 垂直製表符 |
\n | 換行符 | \r | 回車符 |
\f | 換頁符 | ||
\數字 | 八進制值(範圍:\000~\377)。 例如:'\60',即爲字符 '0' | ||
\x數字 | 十六進制值(範圍:\x00~\xff)。 例如:'\x30',即爲字符 '0' | ||
\uxxxx | 雙字節Unicode字符。 例如:'\u4E00',即爲漢字 「一」 | ||
\Uxxxxxxxx | 四字節Unicode字符。 例如'\U00004E00',即爲漢字 「一」 | ||
\N字符名稱 | 較少用到 |
Python 3.6 添加了一種新的字符串格式化方法,這種新的格式化字符串容許在字符串常量中使用嵌入的 Python 表達式(使用花括號表示表達式),這種方式須要在字符串前加上字母「f」,稱爲「f-strings」。
這個功能及其強大,若是你使用的是 Python 3.6以上版本,優先推薦使用這種方式。 f-strings同時也支持上面 format() 方法中各類「格式說明符」的使用,下面是一些例子:
name = 'world' a, b = 1, 2 err = 31 f'Hello {name}!' f'{a} plus {b} is {a+b}.' f'error num is {err:X}' f'error num is {err:#X}'
執行結果
Hello world! 1 plus 2 is 3. error num is 1F error num is 0x1F