第三十八節,字符串格式化

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%
相關文章
相關標籤/搜索