python中格式化字符串的方式有兩種,一種是使用"%s"的方式,一種是str.format()的方式,接下來就對這兩種方式做個介紹
1.%s的方式
兩種用法,第一種是在字符串中使用%s占位,在字符串后使用%替換值來替換,例如:
print("my name is %s and i am %d years old" %("xiaoming",18) 輸出結果:my name is xiaoming and i am 18 years old print("Hello,%s" % "Tom") 輸出結果:Hello,Tom
該方式的優點是簡單,缺點是影響可讀性的,在數量多了以后,很難清楚哪一個占位符對應哪一個實參,排序很麻煩
另一種方式可以用字典的形式進行表示:
print ("Hello,%(name)s" % {"name":"Tom"}) # 參數比較多的情況下這樣用 value = {"greet": "Hello world", "language": "Python"} print("%(greet)s from %(language)s." % value) print("%(greet)s from %(language)s." % {"greet": "Hello world", "language": "Python"}
常用字符格式有:
- %% 百分號標記 #就是輸出一個%
- %c 字符及其ASCII碼
- %s 字符串
- %d 有符號整數(十進制)
- %u 無符號整數(十進制)
- %o 無符號整數(八進制)
- %x 無符號整數(十六進制)
- %X 無符號整數(十六進制大寫字符)
- %e 浮點數字(科學計數法)
- %E 浮點數字(科學計數法,用E代替e)
- %f 浮點數字(用小數點符號)
- %g 浮點數字(根據值的大小采用%e或%f)
- %G 浮點數字(類似於%g)
- %p 指針(用十六進制打印值的內存地址)
- %n 存儲輸出字符的數量放進參數列表的下一個變量中
2.format()方式
在python2.6開始,Python中新增加了一個字符串格式化字符的函數str.format(),此函數可以快速的處理各種字符串,增強了字符串格式化的功能。
基本語法是使用{}來替代%。format函數的實參位置可以不按照順序
1.使用位置參數
要點:位置參數不受順序約束,且可以為{},只要format里有相對應的參數值即可,參數索引從0開,傳入位置參數列表可用*列表
"{} {}".format("hello","world")#設置指定位置,按默認順序 輸出為:'hello world' "{1} {0}".format("world","hello") # 設置指定位置 輸出為:'hello world' "{1} {0} {1}".format("hello", "world") # 設置指定位置 輸出為:'world hello world' input=["hello", "world"] #傳入位置參數列表可用*列表 "{} {}".format(*input) 輸出為:'hello world'
2.使用關鍵字參數,類似於使用字典key值占位,將字典作為參數傳入字符串
要點:字符串中的關鍵字參數要與傳入的參數值對得上,可用字典當關鍵字參數傳入值,字典前加**即可
hash = {'name':'Bingo','age':18} 'my name is {name},age is {age}'.format(name='Bingo',age=18) 輸出:'my name is Bingo,age is 18' 'my name is {name},age is {age}'.format(**hash)#通過關鍵字,並用字典當關鍵字傳入值時,在字典前加**即可 輸出:'my name is Bingo,age is 18'
3、填充與格式化(:[填充字符][對齊方式 <^>][寬度])
^、<、>分別是居中、左對齊、右對齊,:號后面帶填充的字符,只能是一個字符,不指定的話默認是用空格填充,對齊方式后面緊跟一個整數可以限定該字段的寬度。
'{0:*>10}'.format(9) ##右對齊 輸出:'*********9' '{0:*<10}'.format(9) ##左對齊 輸出:'9*********' '{0:*^10}'.format(9)##居中對齊 輸出:'****9*****'
4、精度與進制
'{0:.2f}'.format(1/3) 輸出:'0.33' '{0:b}'.format(10) #二進制 輸出:'1010' '{0:o}'.format(10) #八進制 輸出:'12' '{0:x}'.format(10) #16進制 輸出:'a' '{:,}'.format(12369132698) #千分位格式化 輸出:'12,369,132,698'
5、通過下標
my_list = ['xiaoming',18] "name {0[0]}, age {0[1]}".format(my_list) #通過列表索引設置參數 'name xiaoming, age 18'
擴展:
如果字符串里面含有 "{" 或者 "}"時,需要把 "{" 和 "}" 字符以 "{{" 和 "}}" 代替。
例如:"{'name1':'{0}','name2':'{1}'}".format('qpy','wjx') 該字符串中包含額外的{},執行該命令后,會報錯,解決方法是將{}用{{}}代替,即
"{{'name1':'{0}','name2':'{1}'}}".format('qpy','wjx')