python中格式化字符串有三種方式:
- %方式
- format方式
- f方式
本博文先聊聊前兩種
1.% 方式
格式:%[(name)] [flags] [width] .[precision] typecode
- (name) 可選,用於選擇指定的key
print("%(name)s的年齡是%(age)d歲" % {"name":"小明","age":20})
# 輸出結果爲:
小明的年齡是20歲
- flags 可選,可供選擇的值有:
+ 右對齊;正數前加正號,負數前加負號;
- 左對齊;正數前無符號,負數前加負號;
空格 右對齊;正數前加空格,負數前加負號;
0 右對齊;正數前無符號,負數前加負號;用0填充空白處
- width 可選,佔有寬度(和flags配合使用)
print("%(name)10s的年齡是%(age)10d歲" % {"name":"小明","age":20})
print("%(name)+10s的年齡是%(age)-10d歲" % {"name":"小明","age":20})
print("%(name) 10s的年齡是%(age) 10d歲" % {"name":"小明","age":-20})
print("%(name)10s的年齡是%(age)010d歲" % {"name":"小明","age":-20})
# 輸出結果分別爲:
小明的年齡是 20歲 # 沒有flags情況下默認右對齊補空格
小明的年齡是20 歲
小明的年齡是 -20歲
小明的年齡是-000000020歲
- .precision 可選,小數點後保留的位數
print("圓周率的值是%(pi).2f" % {"pi":3.1415926})
print("圓周率的值是%(pi)010.2f" % {"pi":3.1415926})
# 輸出結果分別爲:
圓周率的值是3.14
圓周率的值是0000003.14
- typecode 必選 常用可選值有:
格式字符 | 說明 | 格式字符 | 說明 |
s | 字符串(採用str()顯示) | r | 字符串(採用repr()顯示) |
f | 浮點數 | o | 八進制整數 |
d | 十進制整數 | x | 十六進制整數 |
e或E | 將整數、浮點數換成科學計數法 | % | 字符% |
2.format 方式
基本語法爲:
- <模板字符串>.format(<逗號分隔的參數>)
如果大括號中沒有序號,則按照位置順序替換:
print("{}:計算機{}的CPU佔用率爲{}".format("2019-12-24","User",30))
輸出結果爲:
2019-12-24:計算機User的CPU佔用率爲30
如果大括號中指定了使用參數的序號,按照序號對應參數替換.參數從0開始編號:
print("{1}:計算機{0}的CPU佔用率爲{2}".format("User","2019-12-24",30))
輸出結果爲:
2019-12-24:計算機User的CPU佔用率爲30
還可以通過關鍵字參數指定填充的參數
print("{time}:計算機{name}的CPU佔用率爲{rate}".format(name="User",time="2019-12-24",rate=30))
輸出結果爲:
2019-12-24:計算機User的CPU佔用率爲30
還可以通過字典的key指定填充的參數
dic = {"name":"User","time":"2019-12-24","rate":30}
print("{dic[time]}:計算機{dic[name]}的CPU佔用率爲{dic[rate]}".format(dic=dic))
輸出結果爲:
2019-12-24:計算機User的CPU佔用率爲30
還可以通過對象屬性指定填充的參數
class Computer():
def __init__(self,name,time,rate):
self.name=name
self.time=time
self.rate=rate
my_computer = Computer("User","2019-12-24",30)
print("{my_computer.time}:計算機{my_computer.name}的CPU佔用率爲{my_computer.rate}".format(my_computer=my_computer))
- format()方法中<模板字符串>除了包含參數序號,還可以包括格式控制符.此時,內部樣式如下:
{<參數序號>:<格式控制符>}
其中,<格式控制符>包括:<填充><對齊><寬度>,<.精度><類型>6個字段,這些字段都是可選的,可以組合使用.
<填充>:指<寬度>內除了參數外的字符采用什麼方式表示,默認採用空格.
<寬度>:指當前槽的設定輸出字符寬度
<對齊>:指參數在<寬度>內輸出是的對齊方式,分別使用<,>和=三個符號表示左對齊,右對齊和居中對齊.
,逗號用於顯示數字的千位分隔符
<.精度>:表示兩個含義,有小數點(.)開頭.對於浮點數,精度表示小數部分輸出的有效位數.對於字符串,精度表示輸出的最大長度.
<類型>:表示輸出整數和浮點數類型的格式規則,用法如同%格式化字符。
print("第一個是:{0:@>10.3f},第二個是:{1:0<10,}".format(3.1415926,12345))
#輸出結果爲
第一個是:@@@@@3.142,第二個是:12,3450000
#表示的意思分別是:
#第一個:第0位數字,以標準浮點數、保留3爲有效數字、指定10個字符寬度、右對齊、用@填充
#第二個:第1位數字,用“,”分隔千位、指定10個字符寬度、左對齊、用0填充