![]()
Python的字符串格式化有兩種方式: 百分號方式、format方式
百分號的方式相對來說比較老,而format方式則是比較先進的方式,企圖替換古老的方式,目前兩者並存。
1、百分號方式
語法:%[(name)][flags][width].[precision]typecode
- (name) 可選,用於選擇指定的key
- flags 可選,可供選擇的值有:
- + 右對齊;正數前加正好,負數前加負號;
- - 左對齊;正數前無符號,負數前加負號;
- 空格 右對齊;正數前加空格,負數前加負號;
- 0 右對齊;正數前無符號,負數前加負號;用0填充空白處
- width 可選,占有寬度
- .precision 可選,小數點后保留的位數
- typecode 必選
- s,獲取傳入對象的__str__方法的返回值,並將其格式化到指定位置
- r,獲取傳入對象的__repr__方法的返回值,並將其格式化到指定位置
- c,整數:將數字轉換成其unicode對應的值,10進制范圍為 0 <= i <= 1114111(py27則只支持0-255);字符:將字符添加到指定位置
- o,將整數轉換成 八 進制表示,並將其格式化到指定位置
- x,將整數轉換成十六進制表示,並將其格式化到指定位置
- d,將整數、浮點數轉換成 十 進制表示,並將其格式化到指定位置
- e,將整數、浮點數轉換成科學計數法,並將其格式化到指定位置(小寫e)
- E,將整數、浮點數轉換成科學計數法,並將其格式化到指定位置(大寫E)
- f, 將整數、浮點數轉換成浮點數表示,並將其格式化到指定位置(默認保留小數點后6位)
- F,同上
- g,自動調整將整數、浮點數轉換成 浮點型或科學計數法表示(超過6位數用科學計數法),並將其格式化到指定位置(如果是科學計數則是e;)
- G,自動調整將整數、浮點數轉換成 浮點型或科學計數法表示(超過6位數用科學計數法),並將其格式化到指定位置(如果是科學計數則是E;)
- %,當字符串中存在格式化標志時,需要用 %%表示一個百分號
注:Python中百分號格式化是不存在自動將整數轉換成二進制表示的方式
tp1="i am %s"%"alex" #%s輸出字符 print('tp1',tp1) tp2 ='i am %s age %d'%('alex',18) ##%s輸出字符串,%d輸出整數 print('tp2',tp2) tp3 = "i am %(name)s age %(age)d" % {"name": "alex", "age": 18} print('tp3',tp3) tp4 = "percent %.2f" % 99.97623 ##f代表是浮點,f后面代表的是浮點的個數,最后一個數四舍五入 print('tp4',tp4) tp5 = "i am %(pp).2f"%{"pp":123.425556}##f代表是浮點,f后面代表的是浮點的個數,最后一個數四舍五入 print('tp5',tp5) tp6= "i am %.5f %%" %123.4255556 #f代表是浮點,f后面代表的是浮點的個數,%%兩個百分號代表一個,最后一個數四舍五入 print('tp6',tp6) ###輸出結果 # tp1 i am alex # tp2 i am alex age 18 # tp3 i am alex age 18 # tp4 percent 99.98 # tp5 i am 123.43 # tp6 i am 123.42556 %
2、Format方式
自python2.6開始,新增了一種格式化字符串的函數str.format(),可謂威力十足。那么,他跟之前的%型格式化字符串相比,有什么優越的存在呢?讓我們來揭開它羞答答的面紗。
語法:[[fill]align][sign][#][0][width][,][.precision][type]
- fill 【可選】空白處填充的字符
- align 【可選】對齊方式(需配合width使用)
- <,內容左對齊
- >,內容右對齊(默認)
- =,內容右對齊,將符號放置在填充字符的左側,且只對數字類型有效。 即使:符號+填充物+數字
- ^,內容居中
- sign 【可選】有無符號數字
- +,正號加正,負號加負;
- -,正號不變,負號加負;
- 空格 ,正號空格,負號加負;
- # 【可選】對於二進制、八進制、十六進制,如果加上#,會顯示 0b/0o/0x,否則不顯示
- , 【可選】為數字添加分隔符,如:1,000,000
- width 【可選】格式化位所占寬度
- .precision 【可選】小數位保留精度
- type 【可選】格式化類型
- 傳入” 字符串類型 “的參數
- s,格式化字符串類型數據
- 空白,未指定類型,則默認是None,同s
- 傳入“ 整數類型 ”的參數
- b,將10進制整數自動轉換成2進制表示然后格式化
- c,將10進制整數自動轉換為其對應的unicode字符
- d,十進制整數
- o,將10進制整數自動轉換成8進制表示然后格式化;
- x,將10進制整數自動轉換成16進制表示然后格式化(小寫x)
- X,將10進制整數自動轉換成16進制表示然后格式化(大寫X)
- 傳入“ 浮點型或小數類型 ”的參數
- e, 轉換為科學計數法(小寫e)表示,然后格式化;
- E, 轉換為科學計數法(大寫E)表示,然后格式化;
- f , 轉換為浮點型(默認小數點后保留6位)表示,然后格式化;
- F, 轉換為浮點型(默認小數點后保留6位)表示,然后格式化;
- g, 自動在e和f中切換
- G, 自動在E和F中切換
- %,顯示百分比(默認顯示小數點后6位)
- 傳入” 字符串類型 “的參數
它通過{}和:來代替%。
常用格式化
1 ##它通過{}和:來代替%。 2 ##都是更具位置來匹配 3 a1='{0},{1}'.format('kzc',18) 4 print('a1',a1) 5 a2='{0},{0}'.format('kzc',18) 6 print('a2',a2) 7 a3='{1},{0}{1}'.format('kzc',18) 8 print('a3',a3) 9 ##輸出======= 10 # a1 kzc,18 11 # a2 kzc,kzc 12 # a3 18,kzc18 13 ##^、<、>分別是居中、左對齊、右對齊,后面帶寬度 14 ##:號后面帶填充的字符,只能是一個字符,不指定的話默認是用空格填充
1 q1='{:_>8}'.format('189') ##>代表右對齊 2 print('q1',q1) 3 4 q2='{:_<8}'.format('189') ##<代表左對齊 5 print('q2',q2) 6 7 q3='{:_^8}'.format('189') ##^代表居中 8 print('q3',q3) 9 # 10 # #輸出------- 11 # q1 _____189 12 # q2 189_____ 13 # q3 __189___
1 #精度與類型f 2 #精度常跟類型f一起使用 3 w1='{:.2f}'.format(321.33545) 4 print('w1',w1) 5 w2= "i am %.5f %%" %123.4255556 #.f代表的是小數后面的幾個數,最后一個數四舍五入 6 print('w2',w2) 7 ##-----輸出----- 8 ## w1 321.34 9 ## w2 i am 123.42556 % 10 #其中.2表示長度為2的精度,f表示float類型。
1 # 主要就是進制了,b、d、o、x分別是二進制、十進制、八進制、十六進制 2 3 e1='{:b}'.format(17) #b二進制表示方式 4 print('e1',e1) 5 e2='{:d}'.format(17) #d十進制表示方式 6 print('e2',e2) 7 e3='{:o}'.format(17) #o八進制表示方式 8 print('e3',e3) 9 e4='{:x}'.format(17) #x十六進制表示方式 10 print('e4',e4) 11 # #輸出------ 12 # # e1 10001 13 # # e2 17 14 # # e3 21 15 # # e4 11
# # 用,號還能用來做金額的千位分隔符。 money='{:,}'.format(1234567890) print('money',money) # # 輸出---- # #money 1,234,567,890
1 tp = "i am {}, age {}, {}".format("seven", 18, 'alex') ##更具中括號對應輸出格式化內容 2 print('tp',tp) 3 4 tp1="i am{},age{},{}".format(*['seven',18,'alex']) ##一個星號*代表傳的是一個列表,**兩個代表萬能參數,隨便傳 5 print('tp1',tp1) 6 7 tp2 = "i am {0}, age {1}, really {0}".format(*["seven", 18]) ##*代表傳的是一個列表,更具位置格式化內容 8 print('tp2',tp2) 9 10 tp3 = "i am {name}, age {age}, really {name}".format(name="seven", age=18)##更具字符名稱傳入內容 11 print('tp3',tp3) 12 13 tp4= "i am {name}, age {age}, really {name}".format(**{"name": "seven", "age": 18})##**萬能參數傳出字典 14 15 print('tp4',tp4) 16 17 tp5= "i am {0[0]}, age {0[2]}, really {0[2]}".format([1, 2, 3], [11, 22, 33])##更具索引位置格式化內容 18 print('tp5',tp5) 19 20 tm6= "i am {:s}, age {:d}, money {:f}".format("seven", 18, 88888.1)##s格式化字符串,d格式化十進制,f格式化浮點 21 print('tm6',tm6) 22 23 tm7="i am {:s}, age {:d}".format(*["seven", 18]) ##格式化字符串和十進制 24 print('tm7',tm7) 25 26 tm8= "i am {name:s}, age {age:d}".format(name="seven", age=18)##指定格式化 27 print('tm8',tm8) 28 29 tm9= "i am {name:s}, age {age:d}".format(**{"name": "seven", "age": 18})##萬能參數**輸出字典, 30 print('tm9',tm9) 31 32 tm10= "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2) 33 print('tm10',tm10)##b代表二進制,o代表八進制,d代表十進制,x代表16進制,X和小寫一樣,:%轉成%分別格式,后面保存6位小數 34 35 tm11= "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2) 36 print('tm11',tm11) 37 38 tm12= "numbers: {0:b},{0:o},{0:d},{0:x},{0:X}, {0:%}".format(15) 39 print('tm12',tm12)##b代表二進制,o代表八進制,d代表十進制,x代表16進制,X和小寫一樣,:%轉成%分別格式,后面保存6位小數 40 41 tm13 = "numbers: {num:b},{num:o},{num:d},{num:x},{num:X}, {num:%}".format(num=15) 42 print('tm13',tm13) 43 44 ##輸出結果------ 45 # tp i am seven, age 18, alex 46 # tp1 i amseven,age18,alex 47 # tp2 i am seven, age 18, really seven 48 # tp3 i am seven, age 18, really seven 49 # tp4 i am seven, age 18, really seven 50 # tp5 i am 1, age 3, really 3 51 # tm6 i am seven, age 18, money 88888.100000 52 # tm7 i am seven, age 18 53 # tm8 i am seven, age 18 54 # tm9 i am seven, age 18 55 # tm10 numbers: 1111,17,15,f,F, 1587.623000% 56 # tm11 numbers: 1111,17,15,f,F, 1587.623000% 57 # tm12 numbers: 1111,17,15,f,F, 1500.000000% 58 # tm13 numbers: 1111,17,15,f,F, 1500.000000%
