python格式化字符串%r_Python语法速查:3.字符串格式化
Apple iPhone 11 (A2223) 128GB 黑色 移動(dòng)聯(lián)通電信4G手機(jī) 雙卡雙待
4999元包郵
去購(gòu)買(mǎi) >
(1)簡(jiǎn)易字符串格式化
字符串屬于不可變序列,只能生成新的,不能改變舊的。“字符串格式化”有點(diǎn)像以前C語(yǔ)言的sprintf,可以將若干變量代入格式化的字符串,生成一個(gè)符合要求的新字符串。
轉(zhuǎn)換字符簡(jiǎn)述舉例或說(shuō)明
%d
十進(jìn)制整數(shù)
'num: %d' %16 # 結(jié)果為 'num: 16'
%o
八進(jìn)制整數(shù)
'num: %o' %16# 結(jié)果為 'num: 20'
%x, %X
十六進(jìn)制整數(shù)(大小寫(xiě)影響輸出字母)
'num: %x' %31 # 結(jié)果為 'num: 1f'(小寫(xiě))
'num: %X' %31 # 結(jié)果為 'num: 1F'(大寫(xiě))
%f, %F
浮點(diǎn)數(shù),默認(rèn)輸出6位小數(shù)(不區(qū)分大小寫(xiě))
'num: %f' %3.14 # 結(jié)果為 'num: 3.140000'
%e, %E
用科學(xué)計(jì)數(shù)法表示的浮點(diǎn)數(shù)(大小寫(xiě)影響輸出字母)
'num: %e' %314 # 結(jié)果為 'num: 3.140000e+02'
'num: %E' %314 # 結(jié)果為 'num: 3.140000E+02'
%g, %G
若“指數(shù)5”則和%e,%E相同,否則同%f,%F(大小寫(xiě)影響輸出字母)
'num: %g' %3140000 # 結(jié)果為 'num: 3.140000e+06'
'num: %g' %314 # 結(jié)果為 'num: 314'
%s
字符串或任意可用str()生成字符串的對(duì)象
'a %s' %'box' # 結(jié)果為 'a box'
'a %s' %[1,2] # 結(jié)果為 'a [1,2]'
%r
同上,只不過(guò)用repr()去生成字符串
'a %r' %'box' # 結(jié)果為 "a 'box'"
%c
用ascii碼數(shù)字去生成單個(gè)字符
'char is %c' %97 # 結(jié)果為 'char is a'
'char is %c' %0x61 # 結(jié)果為 'char is a'
%%
轉(zhuǎn)義%(百分號(hào))
'50 %%' # 結(jié)果為 '50 %'
%(鍵名)轉(zhuǎn)換字符
指定的鍵必須出現(xiàn)在后面的字典中,若不存在則引發(fā)KeyError錯(cuò)誤
'%(a)d' %{'a':1}# 結(jié)果為 '1',注意:轉(zhuǎn)換字符d不要漏掉
“修飾符”可以插入上面的%和字母之間,用以更精確地控制輸出字符串的格式,若干個(gè)修飾符可組合一起使用。
修飾符簡(jiǎn)述舉例或說(shuō)明
數(shù)字
指定被修飾對(duì)象的最小寬度(默認(rèn)右對(duì)齊)
'a%5d' %3 # 結(jié)果為 'a????3' (數(shù)字3前面有4個(gè)空格)
'a%5s' %'bc' # 結(jié)果為 'a???bc' (bc前面有3個(gè)空格)
-
表示左對(duì)齊
'a%-5d' %3 # 結(jié)果為 'a3????' (數(shù)字3后面有4個(gè)空格)
'a%-5s' %'bc' # 結(jié)果為 'abc???' (bc后面有3個(gè)空格)
+
若被修飾對(duì)象為正數(shù),則數(shù)字前生成加號(hào)
'a%+5d' %3 # 結(jié)果為 'a???+3' (數(shù)字+3前面有3個(gè)空格)
'a%-+5d' %3 # 結(jié)果為 'a+3???' (左對(duì)齊,+3后有3個(gè)空格)
空格
若被修飾對(duì)象為正數(shù),則數(shù)字前保留一個(gè)空格
'a% 5d' %3 # 結(jié)果為 'a??? 3' (' 3'后面有3個(gè)空格)
'a%-+5d' %3 # 結(jié)果為 'a 3???' (' 3'后有3個(gè)空格)
0
若被修飾對(duì)象為數(shù)字且為右對(duì)齊,則在數(shù)字前用0代替空格填充
'a%+05d' %3 # 結(jié)果為 'a+0003' (%+05d的總寬度仍為5)
.數(shù)字
若被修飾對(duì)象為浮點(diǎn)數(shù),則表示小數(shù)點(diǎn)后顯示位數(shù);若為字符串,則表示字符串的最大寬度
'%8.2f' %3.1415 # 結(jié)果為 '????3.14'
'# 上例含義為:總寬度為8,小數(shù)點(diǎn)后保留2位小數(shù),故3.14前有4個(gè)空格
*
可以在指定格式數(shù)字(寬度、小數(shù)位數(shù)等)時(shí),用*字符代替直接數(shù)字,然后在后面的變量中給出數(shù)值
a = 8; b = 2
'%*.*f' %(3.14,a,b) # 結(jié)果為 '????3.14'
(2)高級(jí)字符串格式化
通過(guò)在字符串對(duì)象上調(diào)用format()方法來(lái)進(jìn)行字符串格式化,使字符串格式化的語(yǔ)法更加規(guī)范。除了一些極其簡(jiǎn)單的情況外,一般推薦用format()這種方式來(lái)進(jìn)行字符串格式化。
● 基本用法
以下在字符串內(nèi)花括號(hào)中的內(nèi)容稱(chēng)為“占位符”。
用法簡(jiǎn)述舉例或說(shuō)明
{數(shù)字}
位置參數(shù)方式,花括號(hào)中的占位符指明后面數(shù)據(jù)出現(xiàn)的位置(從0開(kāi)始)
'{0} {1} is {2}'.format('a','b',3.14)
# 結(jié)果為 'a b is 3.14'
{參數(shù)名}
關(guān)鍵字參數(shù)方式,花括號(hào)中占位符指明后面數(shù)據(jù)的關(guān)鍵字參數(shù)
'{name} is {age}'.format(name='Tom',age=6)
# 結(jié)果為 'Tom is 6'
聯(lián)合使用
根據(jù)函數(shù)入?yún)⒁?guī)則,所有位置數(shù)據(jù)必須出現(xiàn)在關(guān)鍵字參數(shù)前面
'{0} plus {1} is {ans}, {name}!'.format(1,5,ans=6,name='Tom')
# 結(jié)果為 '1 plus 5 is 6, Tom!'
擴(kuò)展使用
占位符還可以進(jìn)行序列索引、字典鍵名、對(duì)象屬性查找,用法見(jiàn)右邊各例。
'{0[2]}'.format([1,2,3]) # 序列索引,結(jié)果為 '3'
'{li[2]}'.format(li=(1,2,3)) # 序列索引,結(jié)果為 '3'
'{0[a]}'.format({'a':1}) # 字典鍵名索引,結(jié)果為 '1'
'{0.attr}'.format(obj) # 取出對(duì)象的屬性,假設(shè) obj對(duì)象具有屬性attr
{{, }}
如果要在字符串中表示花括號(hào)本身,則需要打上2個(gè)花括號(hào)
'{{abc}}'.format() # 結(jié)果為 '{abc}'
● 格式說(shuō)明符
可以使用格式說(shuō)明符,對(duì)輸出進(jìn)行更加精確的控制。方法是用一個(gè)冒號(hào)給每個(gè)占位符添加格式說(shuō)明,即 {占位符 :格式說(shuō)明符 } 的形式。“格式說(shuō)明符”的基本語(yǔ)法如下:
[ [fill] ?align] ?[sign] ?[0] ?[width] ?[group_option] ?[.precision] ?[type]
上面 [] 中的每個(gè)說(shuō)明符都是可選的,各說(shuō)明符的含義和用例見(jiàn)下表:
說(shuō)明符簡(jiǎn)述舉例或說(shuō)明
fill
fill必須align一起使用,用來(lái)指定填充字符。
'{0:*^9}'.format('abc') # 結(jié)果為 '***abc***'
# 其中,*為填充字符,^表示居中對(duì)齊,9為指定寬度
align
對(duì)齊方式(默認(rèn)數(shù)字為右對(duì)齊,字符串為左對(duì)齊),可取值為:, ^,分別表示:左對(duì)齊、右對(duì)齊、居中對(duì)齊。
'{0:5}'.format('abc') # 結(jié)果為 'abc??'
'{0:>5}'.format('abc') # 結(jié)果為 '??abc'
'{0:^5}'.format('abc') # 結(jié)果為 '?abc?'
sign
可取值為:+, -, 空格。“+”表示所有數(shù)字前都要加上符號(hào),“-”表示只在負(fù)數(shù)前加符號(hào)(默認(rèn)值),“空格”表示在正數(shù)前面加一個(gè)空格。
'{0:+}'.format(3.14) # 結(jié)果為 '+3.14'
0
用0來(lái)填充數(shù)字前面的空白,對(duì)字符串不起作用
'{0:+08}'.format(3.14) # 結(jié)果為 '+0003.14'
width
指明寬度
'{0:8}'.format(3.14) # 結(jié)果為 '????3.14'
'{0:8}'.format('abc') # 結(jié)果為 'abc?????'
group_option
千分位分隔,取值可為“,”或“_”(下劃線為Python3.6新增,可用來(lái)表示二、八、十六進(jìn)制的每4位分隔。)
'{0:,}'.format(12345678) # 結(jié)果為 '12,345,678'
'{0:_b}'.format(0xA5) # 結(jié)果為 '1010_0101'
.precision
浮點(diǎn)數(shù)要顯示的位數(shù),后面需跟type為f或e,否則不起作用。
'{0:.4f}'.format(3.14) # 結(jié)果為 '3.1400'
'{0:.4e}'.format(3.14) # 結(jié)果為 '3.1400e+00'
type
輔助聲明“說(shuō)明符”的數(shù)據(jù)類(lèi)型,可取值范圍見(jiàn)下表。(默認(rèn):字符串為s、整數(shù)為d、小數(shù)為f)
type各值舉例見(jiàn)下表
● type取值范圍
字符簡(jiǎn)述舉例或說(shuō)明
d, i
十進(jìn)制整數(shù)
'{0:d}'.format(10) # 結(jié)果為 '10'
b
二進(jìn)制整數(shù)
'{0:b}'.format(10) # 結(jié)果為 '1010'
o
八進(jìn)制整數(shù)
'{0:o}'.format(10) # 結(jié)果為 '12'
x, X
十六進(jìn)制整數(shù)(大小寫(xiě)影響輸出字母)
'{0:x}'.format(10) # 結(jié)果為 'a'
'{0:X}'.format(10) # 結(jié)果為 'A'
f, F
浮點(diǎn)數(shù)(默認(rèn)顯示6位小數(shù))
'{0:f}'.format(3.14) # 結(jié)果為 '3.140000'
e, E
科學(xué)計(jì)數(shù)法表示(大小寫(xiě)影響輸出字母)
'{0:e}'.format(3.14) # 結(jié)果為 '3.140000e+00'
'{0:E}'.format(3.14) # 結(jié)果為 '3.140000E+00'
g, G
若“指數(shù)5”則和g,G相同,否則同f,F(且不會(huì)去填滿(mǎn)小數(shù)6位)
'{0:g}'.format(3.14) # 結(jié)果為 '3.14'
%
把一個(gè)數(shù)乘以100,并在后面加上百分號(hào)
'{0:%}'.format(3.14) # 結(jié)果為 '314.000000%'
s
表示字符串
'{0:s}'.format('abc') # 結(jié)果為 'abc'
c
用ascii碼數(shù)字去生成單個(gè)字符
'{0:c}'.fomrat(97)# 結(jié)果為 'a'
● 用參數(shù)代入說(shuō)明符
說(shuō)明符同樣可以用format()函數(shù)的輸入?yún)?shù)來(lái)代入,但只能嵌套一層深度,用法舉例見(jiàn)下:
>>> '{0:{w}}'.fomrat('a',w=3) # 結(jié)果為 'a??' (將{w}用后面的參數(shù)w=3代入,變?yōu)?#39;{0:3}'
>>> '{0:.{1}f}'.format(3.14,4) # 結(jié)果為 '3.1400' (將{1}用后面的第二個(gè)參數(shù)4代入,變?yōu)?#39;{0:.4f}')
返回標(biāo)題
原文鏈接:https://www.cnblogs.com/initcircuit/p/11574434.html
總結(jié)
以上是生活随笔為你收集整理的python格式化字符串%r_Python语法速查:3.字符串格式化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java多线程同步Synchronize
- 下一篇: Ctrl+shift+f不起作用的原因