python字符串格式化

【前言】本文主要介紹python中的字符串格式化,通過基本概念,使用方法及例子學習python字符串格式化的兩種主要形式:字符串格式化表達以及字符串格式化方法調用。

0. python字符串格式化

  字符串格式化允許在一個單個的步驟中對一個字符串執行多個特定類型的替換,特別是給用戶提示的時候,格式化非常方便。如今的python中的字符串格式化可以以兩種形式實現:
字符串格式化表達式

基於C語言的“printf”模型,並且在大多數的代碼中使用。在表達式中,我們使用%二進制操作符對字符串進行格式化,%操作符爲編寫多字符串提供了一種簡潔的方法。

字符串格式化方法調用

這是python 2.6和python 3.0新增的一種格式化字符串的方法str.format(),通過{}和字符串對象的format方法代替字符串格式化表達式%

1. 字符串格式化表達式

  格式化字符串表達式的定義如下:
1. 在%操作符的左側放置一個需要進行格式化的字符串,這個字符串帶有一個或多個嵌入的轉換目標,都以%開頭(e.g., %d).
2. 在%d操作符右側放置一個(或多個,嵌入到元組中)對象,這些對象將會插入到左側想讓python進行格式化字符串的一個(或多個)轉換目標的位置上去。


>>> '%s -- %s -- %s' % (42, 3.1415926, [1, 2, 3])
"42 -- 3.1415926 -- [1, 2, 3]"

  注意到上述例子在字符串插入三個值,類型分別爲:整數, 浮點數對象, 列表對象。但是所有目標左側都是 ‘%s’, 這就表示把它們轉換爲字符串。由於對象的每個類別都可以轉換爲字符串(打印時使用),每一個與’%s’一同參與操作的對象類型都可以轉換代碼。因此,除非需要做特殊的格式化,一般用’%s’就可以格式化表達式。
  轉換目標的通用結構:

%[(name)][flags][width][.precision] typecode
%[對齊] [索引:] [佔位符(填充符號)] [最小佔位寬度] [.精度 ] [限定符] 標識格式符 (c,s,d,o,f,x,X...)

python字符串格式化符號:

      符 號 描述
%c 格式化字符及其ASCII碼
%s 格式化字符串(或任何對象)
%d 格式化整數(十進制)
%u 格式化無符號整型
%o 格式化無符號八進制數
%x 格式化無符號十六進制數
%X 格式化無符號十六進制數(大寫)
%f 格式化浮點數字,可指定小數點後的精度
%e 用科學計數法格式化浮點數
%E 作用同%e,用科學計數法格式化浮點數(大寫E)
%g 根據值的大小決定使用%f活%e
%G 作用同%g,根據值的大小決定使用%f活%e
%p 用十六進制數格式化變量的地址

格式化操作符輔助指令:

符號 功能
* 定義寬度或者小數點精度
- 用做左對齊
+ 在正數前面顯示加號( + )
sp 在正數前面顯示空格
# 在八進制數前面顯示零(‘0’),在十六進制前面顯示’0x’或者’0X’(取決於用的是’x’還是’X’)
0 顯示的數字前面填充’0’而不是默認的空格
% ‘%%’輸出一個單一的’%’
(var) 映射變量(字典參數)
m.n. m 是顯示的最小總寬度,n 是小數點後的位數(如果可用的話)

例子:你可以在格式化字符串中用一個*來指定通過計算得出width和precision,從而迫使它們的值從%運算符右邊的輸出中的下一項獲取,在這裏,元組中的4指定爲precision:

>>> 
>>> "%f, %.2f, %.*f" % (1/3.0, 1/3.0, 4, 1/3.0)
'0.333333, 0.33, 0.3333'
>>> 

基於字典的字符串格式化
  字符串中的格式化同時也允許左邊的轉換目標來引用右邊字典中的鍵來提取對應的值:

>>> 
>>> "%(n)d %(x)s" % {"n":1, "x":"spam"}
'1 spam'
>>> 

  上例中,格式化字符串裏(n)和(x)引用了右邊字典中的鍵,並提取它們對應的值。生成類似HTML或XML的程序往往利用了這一技術:你可以建立一個數值字典,並利用一個基於鍵的引用的格式化表達式一次性替代它們:

>>> reply = """
... Greetings...
... Hello %(name)s !
... Your age squared is %(age)s
... """
>>> values = {'name':'Solomon', 'age':18}
>>> print(reply % values)

Greetings...
Hello Solomon !
Your age squared is 18
>>> 

  python中三引號可以將複雜的字符串進行復制, python三引號允許一個字符串跨多行,字符串中可以包含換行符、製表符以及其他特殊字符。

2. 字符串格式化調用方法

  python 2.6和python 3.0(及其以後的版本)中的新的字符串對象的format方法使用主體字符串作爲模板,並且接受任意多個表示將要根據模板替換的值的參數。在主體字符串中,花括號{}通過位置(e.g., {1})或關鍵字(e.g., {food})指出替換目標及將要插入的參數。

“映射”示例


通過位置

>>> '{0},{1}'.format('Solomon',24)  
'Solomon,24'
>>> '{},{}'.format('Trump',70)  
'Trump,70'
>>> '{1},{0},{1}'.format('Hillary',69)
'69,Hillary,69'
>>> 

  字符串的format函數可以接受不限個參數,位置可以不按順序,可以不用或者用多次,不過2.6不能爲空{},2.7纔可以。
通過關鍵字參數

'{name},{age}'.format(age=18,name='kzc')  

通過對象屬性

...     def __init__(self,name,age):  
...         self.name,self.age = name,age  
...         def __str__(self):  
...             return 'This guy is {self.name},is {self.age} old'.format(self=self) 
... 
>>> 
>>> str(Person('Solomon', 24))

通過下標

>>> str = ['Solomon', 24]
>>> '{0[0]},{0[1]}'.format(str)
'Solomon,24'
>>>

  基本的Python知識告訴我們,list和tuple可以通過“打散”成普通參數給函數,而dict可以打散成關鍵字參數給函數(通過和*)。所以可以輕鬆的傳個list/tuple/dict給format函數。非常靈活。

格式限定符


  它有着豐富的的“格式限定符”(語法是{}中帶:號),比如——

填充與對齊
填充常跟對齊一起使用
^、<、>分別是居中、左對齊、右對齊,後面帶寬度
:號後面帶填充的字符,只能是一個字符,不指定的話默認是用空格填充
比如

>>> '{:<9}'.format('1992')
'1992     '
>>> '{:>9}'.format('1992')
'     1992'
>>> '{:0>9}'.format('1992')
'000001992'
>>> '{:0<9}'.format('1992')
'199200000'
>>> '{:a<9}'.format('1992')
'1992aaaaa'
>>> 

精度與類型f
  精度常跟類型f一起使用

>>> '{:.2f}'.format(3.1415926)
'3.14'
>>> 

  其中.2表示長度爲2的精度,f表示float類型。

其他類型
  主要就是進制了,b、d、o、x分別是二進制、十進制、八進制、十六進制。

>>> '{:b}'.format(9)
'1001'
>>> '{:d}'.format(9)
'9'
>>> '{:o}'.format(9)
'11'
>>> '{:x}'.format(9)
'9'
>>> 

  ‘,’號還能用來做金額的千位分隔符。

>>> '{:,}'.format(1234567890)
'1,234,567,890'
>>> 

Reference

[1] 愛做夢的魚. Python中的字符串處理
http://www.cnblogs.com/dreamer-fish/p/3818443.html
[2] mattkang. 飄逸的python - 增強的格式化字符串format函數
http://blog.csdn.net/handsomekang/article/details/9183303

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章