字串格式化處理
遠古寫法
以前通常使用運算子號 %
,%s
插入的值 String
型別,%.3f
指插入的值為包含 3 位小數的浮點數:
format1 = "%s, %s!" % ('Hello', 'World')
# 'Hello, World!'
關鍵字插入法:
temp = string.Template('I am $name, I like $what!;)
temp.substitute(name='Liang', what='Apple')
# 'I am Liang, I like Apple!'
Python 3 推薦方法
新版本 Python 中,應選擇使用字串方法 format
,每個替換欄位都用 {}
大括號(花括號)括起,括號內可留空或新增格式設定資訊:
- 一般用法:
'I am {},I like {}'.format('Liang', 'Apple')
# 'I am Liang, I like Apple!'
'I am {0},I like {1}'.format('Liang', 'Apple')
# 'I am Liang, I like Apple!'
- 索引也可無需像上面一樣順序排列,但注意不能同時使用自動索引和手工索引:
'I am {1},I like {0}'.format('Apple', 'Liang')
# 'I am Liang, I like Apple!'
- 更可以像上面關鍵字插入法一樣,給每個替換欄位命名,名稱後面跟冒號可以設定格式:
'{name} is {value:.2f},'.format(name='π', value=pi)
# 'π is 3.14'
- 終極簡約寫法,在字串前面加上
f
,便可直接將值或變數寫在大括號內:
f"{'π'} is {pi:.2f}"
# 'π is 3.14'
- 如果輸出結果中需要包含大括號,則可使用兩個大括號來指定:
"{{我需要使用{what}啊!}}".format(what='大括號')
# {我需要使用大括號啊!}
- 關鍵字插入法可以和索引同時使用:
'{foo} {1} {bar} {0}'.format(1, 2, foo=3, bar=4)
# '3 1 2 4'
基本轉換
指定佔位符要轉換的型別;
例如,你可以提供一個整數,但將其作為小數進行處理:
num = 1024
f'The number is {num:f}'
# 'The number is 1024.000000'
亦或者將其作為二進位制處理:
num = 1024
f'The number is {num:b}'
# 'The number is 10000000000'
以下為字串格式設定型別說明符:
說明符 | 含義 |
---|---|
b | 將整數表示為二進位制 |
c | 將整數解讀為Unicode碼點 |
d | 將整數視為十進位制數進行處理,這是整數預設使用的說明符 |
e | 使用科學表示法來表示小數(用 e 來表示指數) |
E | 與 e 相同,但使用 E 來表示指數 |
f | 將小數表示為定點數 |
F | 與 f 相同,但與特殊值(nan 和 inf),使用大寫表示 |
g | 自動在定點表示法和科學表示法之間做選擇。這是預設用於小數的說明符,但在預設情況下至少有 1 位小數 |
G | 與 g 相同,但使用大寫來表示指數和特殊值 |
n | 與 g 相同,但插入隨區域而異的數字分隔符 |
o | 將整數表示為八進位制數 |
s | 保持字串的格式不變,這是預設用於字串的說明符 |
x | 將整數表示為十六進位制數並使用小寫字母 |
X | 與 X 相同,但使用大寫字母 |
% | 將數表示為百分比值(乘以100,按說明符 f 的設定格式,再在後面加上 %) |
寬度、精度和千位分隔符
在字串格式化處理是,不但可以轉換型別,還可以設定轉換欄位的寬度和精度;
寬度使用整數表示:
num = 1024
f'{num:10}'
# ' 1024'
數字和字串的預設對齊方式不同:
num = '1024'
f'{num:10}'
# '1024 '
精度也是使用整數表示,但需要在整數前加上小數點:
num = 1024
f'{num:.2f}'
# '1024.00'
寬度可以和精度同時指定:
num = 1024
f'{num:10.2f}'
# ' 1024.00'
字串型別也可以指定精度,但不推薦使用,使用切片處理則更好理解:
str = '今天天氣不錯~'
f'{str:.2}'
# '今天'
在冒號後面新增一個逗號可以為數值新增千位分隔符:
num = 10000000000000
f'{num:,}'
# '10,000,000,000,000'
填充、對齊與符號
在不新增對齊符號(使用預設對齊方式)的情況下,儘可以使用 0
進行有意義的填充操作:
num = 1024
f'{num:010}'
# '0000001024'
但是在新增了對齊符號之後,就可以在對齊符號前面任意新增一個字元表示填充字元了;
對齊符號:<
(左對齊)、>
(右對齊)、^
(居中),寫在寬度之前:
num = 1024
f'{num:<10}'
'1024 '
f'{num:^10}'
' 1024 '
f'{num:>10}'
' 1024'
當替換欄位為數值時,可為替換欄位新增正負符號,
新增 +
符號時,加號寫在對齊符號之後,寬度整數之前;
新增 -
符號時,減號寫在替換欄位的之前;
可以理解為將替換欄位的數值乘以 +1
(將 +
顯示)或 -1
:
num = 1024
f'{num:>+10}'
' +1024'
f'{-num:>10}'
' -1024'
如果需要為負數新增符號:
num = -1024
f'{num:>10}'
' -1024'
f'{-num:>+10}'
' +1024'
=
是一種新增了正負符號之後的另一種對齊符號(可以理解為 兩端對齊),作用是將填充字元放在符號和數字之間:
num = 1024
f'{num:=+10}'
'+ 1024'
f'{-num:=10}'
'- 1024'
總結
'{[0]sum[1][2][3][4][5]}'
0:為替換欄位新增 -
符號(替換欄位須為數字且不為負數,因為負數無需再多此一舉);
1:為替換欄位指定寬度之後可以在此位置指定填充字元,預設為空格;
2:為替換欄位指定寬度之後可以在此位置指定對齊符號,<
(左對齊) / ^
(居中) / >
(右對齊) / =
(兩端對齊,只能用於型別為數值切有正負符號的替換欄位);
3:為替換欄位新增 +
符號(替換欄位須為數字);
4:指定替換欄位的寬度,只能填寫整數;
5:指定替換欄位的精度或轉換型別;