Python的字符串格式化有兩種方式: 百分號方式、format方式python
百分號的方式相對來講比較老,而format方式則是比較先進的方式,企圖替換古老的方式,目前二者並存。spa
一、百分號方式格式化字符串code
%[(name)][flags][width].[precision]typecode必選 百分號方式有這5種方法orm
typecode 必選對象
如:blog
%s字符串格式化拼接,將幾個字符串拼接在一塊兒%s爲佔位符,就是佔位的做用,主意:佔位符與佔位符之間還能夠加一個分隔符
%()引用數據到佔位符
若是有幾個字符串須要拼接
拼接格式:
"佔位符要引用幾個字符串就寫幾個佔位符" %(要引用的字符串變量)索引
#!/usr/bin/env python # -*- coding:utf8 -*- """ %s字符串格式化拼接,將幾個字符串拼接在一塊兒 %s爲佔位符,就是佔位的做用,主意:佔位符與佔位符之間還能夠加一個分隔符 %()引用數據到佔位符 若是有幾個字符串須要拼接 拼接格式: "佔位符要引用幾個字符串就寫幾個佔位符" %(要引用的字符串變量) """ a = "你好" b = "我好" c = "你們好" d = "%s%s%s" %(a, b, c) print(d) #輸出 #你好我好你們好
typecode的方法有如下幾種ci
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中百分號格式化是不存在自動將整數轉換成二進制表示的方式unicode
(name)可選,用於選擇指定的key,就是給佔位符設置一個名稱,字典傳值對應的佔位符,也就是能夠自定義傳值位置字符串
如:%(n1)s
#!/usr/bin/env python # -*- coding:utf8 -*- a = "百分%(n2)s的方式相%(n1)s來講比較老" % {"n1":"對", "n2":"號"} #可選,用於選擇指定的key,就是給佔位符設置一個名稱,字典傳值對應的佔位符,也就是能夠自定義傳值位置 print(a) #輸出 # 百分號的方式相對來講比較老
flags可選,可供選擇的值有,左對齊或者右對齊,通常配合width使用
+ 右對齊;正數前加正好,負數前加負號;
如:flags:%+s width:10
配合:%+10s 右對齊10個字符,就是佔位符在10個空白字符的右邊
#!/usr/bin/env python # -*- coding:utf8 -*- a = "百分%+10s的方式相%s來講比較老" % ("號","對") #配合:%+10s 右對齊10個字符,就是佔位符在10個空白字符的右邊 print(a) #輸出 # 百分 號的方式相對來講比較老
- 左對齊;正數前無符號,負數前加負號;
#!/usr/bin/env python # -*- coding:utf8 -*- a = "百分%-10s的方式相%s來講比較老" % (-20,"對") #左對齊10的寬度,數字類型負數自動加負號 print(a) #輸出 # 百分-20 的方式相對來講比較老
空格 右對齊;正數前加空格,負數前加負號;
#!/usr/bin/env python # -*- coding:utf8 -*- a = "百分% 10s的方式相%s來講比較老" % (-20,"對") #右對齊10的寬度,數字類型負數自動加負號 print(a) #輸出 # 百分 -20的方式相對來講比較老
0 右對齊;正數前無符號,負數前加負號;用0填充空白處,0填充只有傳值數字有效
#!/usr/bin/env python # -*- coding:utf8 -*- a = "百分%010s的方式相%s來講比較老" % (-20,"對") #右對齊10的寬度,數字類型負數自動加負號 print(a) #輸出 # 百分 -20的方式相對來講比較老
width可選,佔有寬度,佔位符佔位寬度,通常配合flags使用
如:flags:%+s width:10
配合:%+10s 右對齊10個字符,就是佔位符在10個空白字符的右邊
#!/usr/bin/env python # -*- coding:utf8 -*- a = "百分%+10s的方式相%s來講比較老" % ("號","對") #配合:%+10s 右對齊10個字符,就是佔位符在10個空白字符的右邊 print(a) #輸出 # 百分 號的方式相對來講比較老
precision 可選,小數點後保留的位數
.1 浮點數保留1位,點後面寫幾就保留幾位
如:%.1f
#!/usr/bin/env python # -*- coding:utf8 -*- a = "百分%.1f的方式相來講比較老" % (1.20000) #小數點後保留的位數,.1 浮點數保留1位,點後面寫幾就保留幾位 print(a) #輸出 # 百分1.2的方式相來講比較老
經常使用格式化:重點
# -*- coding:utf8 -*- tp1 = "i am %s" % ("alex") print(tp1) tp2 = "i am %s age %d" % ("alex", 18) print(tp2) tp3 = "i am %(name)s age %(age)d" % {"name": "alex", "age": 18} print(tp3) tp4 = "percent %.2f" % 99.97623 print(tp4) tp5 = "i am %(pp).2f" % {"pp": 123.425556, } print(tp5) tp6 = "i am %(pp).2f %%" % {"pp": 123.425556, } print(tp6) #輸出 # i am alex # i am alex age 18 # i am alex age 18 # percent 99.98 # i am 123.43 # i am 123.43 %
注:Python中百分號格式化是不存在自動將整數轉換成二進制表示的方式
二、Format方式格式化字符串【推薦】
[[fill]align][sign][#][0][width][,][.precision][type] Format方式都是可選的 有這九種方法
format 方式格式化字符串,是在字符串里加{}大括號做爲佔位符,在字符串後面.format("要引用的字符串"或變量)
如:"這是一{}字{}串".format("段","符")
#!/usr/bin/env python # -*- coding:utf8 -*- tp1 = "這是一{}字{}串".format("段","符") print(tp1) #輸出 #這是一段字符串
fill【可選】空白處填充的字符,通常須要配合align和width使用
如:fill:填充* align:對齊方式 width:寬度10個字符
結合:{:*>10}
#!/usr/bin/env python # -*- coding:utf8 -*- tp1 = "這是一{:*>10}字{}串".format("段","符") #空白處填充的字符,通常須要配合align和width使用 print(tp1) #輸出 #這是一*********段字符串
align【可選】對齊方式(需配合width使用)
<,內容左對齊
#!/usr/bin/env python # -*- coding:utf8 -*- tp1 = "這是一{:<10}字{}串".format("段","符") #內容左對齊,10個字符寬度 print(tp1) #輸出 #這是一段 字符串
>,內容右對齊(默認)
#!/usr/bin/env python # -*- coding:utf8 -*- tp1 = "這是一{:>10}字{}串".format("段","符") #內容右對齊,10個字符寬度 print(tp1) #輸出 #這是一 段字符串
=,內容右對齊,將符號放置在填充字符的左側,且只對數字類型有效。 即便:符號+填充物+數字
#!/usr/bin/env python # -*- coding:utf8 -*- tp1 = "這是一{:|=10}字{}串".format(2,"符") #內容右對齊,10個字符寬度 print(tp1) #輸出 #這是一|||||||||2字符串
^,內容居中
#!/usr/bin/env python # -*- coding:utf8 -*- tp1 = "這是一{:|^10}字{}串".format("段","符") #內容居中,10個字符寬度 print(tp1) #輸出 #這是一||||段|||||字符串
sign【可選】有無符號數字
+,正號加正,負號加負;
#!/usr/bin/env python # -*- coding:utf8 -*- tp1 = "這是一{:+}字{}串".format(20,"符") #正號加正,負號加負; print(tp1) #輸出 #這是一+20字符串
-,正號不變,負號加負;
#!/usr/bin/env python # -*- coding:utf8 -*- tp1 = "這是一{:-}字{}串".format(20,"符") #正號不變,負號加負 print(tp1) #輸出 #這是一20字符串
空格 ,正號空格,負號加負;
#!/usr/bin/env python # -*- coding:utf8 -*- tp1 = "這是一{: }字{}串".format(20,"符") #空格 ,正號空格,負號加負 print(tp1) #輸出 #這是一 20字符串
#【可選】對於二進制、八進制、十六進制,若是加上#,會顯示 0b/0o/0x,不然不顯示
#須要結合type的進制 如:#b
#!/usr/bin/env python # -*- coding:utf8 -*- tp1 = "這是一{:#b}字{}串".format(20,"符") #對於二進制、八進制、十六進制,若是加上#,會顯示 0b/0o/0x,不然不顯示 print(tp1) #輸出 #這是一0b10100字符串
,【可選】爲數字添加分隔符,如:1,000,000 像銀行系統餘額類型
如:把1000 轉換成1,000
#!/usr/bin/env python # -*- coding:utf8 -*- tp1 = "這是一{:,}字{}串".format(1000,"符") #【可選】爲數字添加分隔符,如:1,000,000 像銀行系統餘額類型 print(tp1) #輸出 #這是一1,000字符串
width【可選】格式化位所佔寬度
#!/usr/bin/env python # -*- coding:utf8 -*- tp1 = "這是一{:10}字{}串".format(1000,"符") #【可選】格式化位所佔寬度,10個字符寬度 print(tp1) #輸出 #這是一 1000字符串
.precision 【可選】小數位保留精度,通常結合type類型使用
如:{:.2f} 小數保留兩位
#!/usr/bin/env python # -*- coding:utf8 -*- tp1 = "這是一{:.2f}字{}串".format(10.233,"符") #.precision 【可選】小數位保留精度,通常結合type類型使用 print(tp1) #輸出 #這是一10.23字符串
type【可選】格式化類型
傳入」 字符串類型 「的參數
s,格式化字符串類型數據
#!/usr/bin/env python # -*- coding:utf8 -*- tp1 = "這是一{:s}字{}串".format("段","符") #s,格式化字符串類型數據 print(tp1) #輸出 #這是一段字符串
空白,未指定類型,則默認是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位)
經常使用格式化:重點
依次對應接收字符串和數字
#!/usr/bin/env python # -*- coding:utf8 -*- tpl = "i am {}, age {}, {}".format("seven", 18, 'alex') #依次對應接受字符串和數字 print(tpl) #輸出 #i am seven, age 18, alex
依次對應接收列表裏的元素,列表前加一個*表示列表裏能夠是若干元素
#!/usr/bin/env python # -*- coding:utf8 -*- tpl = "i am {}, age {}, {}".format(*["seven", 18, 'alex',20]) #依次對應接收列表裏的元素,列表前加一個*表示列表裏能夠是若干元素 print(tpl) #輸出 #i am seven, age 18, alex
索引方式接收字符串或數字
#!/usr/bin/env python # -*- coding:utf8 -*- tpl = "i am {0}, age {1}, really {0}".format("seven", 18) #索引方式接收字符串或數字 print(tpl) #輸出 #i am seven, age 18, really seven
索引方式接收列表裏的元素,列表前加*表示列表裏的元素能夠是若干
#!/usr/bin/env python # -*- coding:utf8 -*- tpl = "i am {0}, age {1}, really {0}".format(*["seven", 18, 20]) #索引方式接收列表裏的元素,列表前加*表示列表裏的元素能夠是若干 print(tpl) #輸出 #i am seven, age 18, really seven
以鍵來接收,鍵值對裏的值
#!/usr/bin/env python # -*- coding:utf8 -*- tpl = "i am {name}, age {age}, really {name}".format(name="seven", age=18) #以鍵來接收,鍵值對裏的值 print(tpl) #輸出 #i am seven, age 18, really seven
以鍵來接收字典裏對應的值,字典前加**表示字典裏能夠是若干元素
#!/usr/bin/env python # -*- coding:utf8 -*- tpl = "i am {name}, age {age}, really {name}".format(**{"name": "seven", "age": 18, "n1":12}) #以鍵來接收字典裏對應的值,字典前加**表示字典裏能夠是若干元素 print(tpl) #輸出 #i am seven, age 18, really seven
以索引裏的索引來接收值
#!/usr/bin/env python # -*- coding:utf8 -*- tpl = "i am {0[0]}, age {0[1]}, really {0[2]}".format([1, 2, 3], [11, 22, 33]) #以索引裏的索引來接收值 print(tpl) #輸出 #i am 1, age 2, really 3
以type類型接收值
#!/usr/bin/env python # -*- coding:utf8 -*- tpl = "i am {:s}, age {:d}, money {:f}".format("seven", 18, 88888.1) #以type類型接收值 print(tpl) #輸出 #i am seven, age 18, money 88888.100000
以type類型接收列表裏的值,列表前加*表示列表裏的元素能夠是若干
#!/usr/bin/env python # -*- coding:utf8 -*- tpl = "i am {:s}, age {:d}".format(*["seven", 18]) #以type類型接收列表裏的值,列表前加*表示列表裏的元素能夠是若干 print(tpl) #輸出 #i am seven, age 18
以鍵名稱加type類型接收,對應的鍵值對的值
#!/usr/bin/env python # -*- coding:utf8 -*- tpl = "i am {name:s}, age {age:d}".format(name="seven", age=18) #以鍵名稱加type類型接收,對應的鍵值對的值 print(tpl) #輸出 #i am seven, age 18
以鍵名稱加type類型,接收字典裏的值,字典前面加**表示字典裏的元素能夠是若干
#!/usr/bin/env python # -*- coding:utf8 -*- tpl = "i am {name:s}, age {age:d}".format(**{"name": "seven", "age": 18}) #以鍵名稱加type類型,接收字典裏的值,字典前面加**表示字典裏的元素能夠是若干 print(tpl) #輸出 #i am seven, age 18
以多種type類型,來接收數字轉換成對應的類型
#!/usr/bin/env python # -*- coding:utf8 -*- tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2) #以多種type類型,來接收數字轉換成對應的類型 print(tpl) #輸出 #numbers: 1111,17,15,f,F, 1587.623000%
以多種type類型接收一個數字,轉換成對應的類型
#!/usr/bin/env python # -*- coding:utf8 -*- tpl = "numbers: {0:b},{0:o},{0:d},{0:x},{0:X}, {0:%}".format(15) #以多種type類型接收一個數字,轉換成對應的類型 print(tpl) #輸出 #numbers: 1111,17,15,f,F, 1500.000000%
以鍵名稱加多種type類型,接收一個鍵值對的值轉換成對應的類型
#!/usr/bin/env python # -*- coding:utf8 -*- tpl = "numbers: {num:b},{num:o},{num:d},{num:x},{num:X}, {num:%}".format(num=15) #以鍵名稱加多種type類型,接收一個鍵值對的值轉換成對應的類型 print(tpl) #輸出 #numbers: 1111,17,15,f,F, 1500.000000%