Python中的字串與字串格式化

ckxllf發表於2021-02-04

  本篇博文講解Python中常用的字串與字串格式化操作。

  常見的字串常量與表示式

  操作解釋

  s = ‘’空字串

  s = “spam’s”普通字串,單雙引號相同

  S = ‘s\np\ta\x00m’轉義序列

  s = “”"…"""三重引號字串塊

  s = r’\temp\spam’Raw字串

  S = b’spam’Python 3.0及之後版本中的位元組字串

  s = u’spam’Python 2.6及之後版本使用的Unicode字串

  s1 + s2合併

  s * 3重複

  s[i]索引

  s[i:j]分片

  len(s)求長度

  “a %s parrot” % kind字串格式化表示式

  “a {0} parrot”.format(kind)Python 2.6及之後版本與Python 3.0及之後版本中的字串格式化方法

  a.find(‘pa’)字串方法呼叫:搜尋

  s.rstrip()移除空格

  s.replace(‘pa’, ‘xx’)替換

  s.split(’,’)用展位符分隔

  s.isdigit()內容測試(這裡是測試是否為數字組成的字串)

  s.lower()大寫轉小寫

  S.endswith(‘spam’)結束字元測試

  ‘spam’.join(strlist)插入分隔符

  S.encode(‘latin-1’)編碼

  for x in S: print(x)迭代

  ‘spam’ in S成員關係判斷

  [c * 2 for c in S]字串解析

  map(ord, S)函式對映

  單雙引號字串相同。在Python中,沒有像c語言一樣的字元的概念,單引號與雙引號表示一樣的字串。

  任意相鄰的字串會被合併。

  a = "abcd"'efg' # 'abcdefg'

  在Python 2.6及之後的版本中,字串前加u為Unicode字串,表示寬Unicode文字;否則為str字串,表示8位文字和二進位制資料。

  在Python 3.0及之後的版本中,字串前加b為Byte字串,表示二進位制資料,變體為bytearray;否則為Unicode文字。3和4中的兩者,在普通的任務中較少使用。

  在上表中,僅列舉了有限的字串方法。若需查詢所有的字串方法,可以參閱Python手冊。

  字串轉義

  ‘\’後面的一個或多個字元,在最終的字串中會被單個字元所替代。

  轉義意義

  \newline\後面另起一行,表示連續

  \反斜槓(保留\字元)

  ’單引號(保留‘字元)

  "雙引號(保留"字元)

  \a響鈴

  \b倒退

  \f換頁

  \n新行(換行)

  \r返回

  \t水平製表符

  \v垂直製表符

  \N{id}Unicode資料庫id

  \uhhhhUnicode 16位的十六進位制值(必須有四個十六進位制位h)

  \uhhhhhhhhUnicode 32位的十六進位制值(必須有八個十六進位制位h)

  \xhh十六進位制值(必須有兩個十六進位制位h)

  \ooo八進位制值(必須至少有一個八進位制位o,至多三個)

  \0空字元(注意與空格不同)

  \other不轉義(保留原字元)

  \u後面必須接4個16進位制位,\U後面必須接8個十六進位制位。合起來是16進位制值表示的一個字元。\u和\U只能用於Unicode常量之中。

  \x後面必須接2個16進位制位。合起來是16進位制值表示的一個字元。

  s = 'abc\xFF' # 'abcÿ'

  s = 'abc\xF' # SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 3-5: truncated \xXX escape

  \後面可接至少一個8進位制位,最多會查詢至3個八進位制位。合起來是8進位制值表示的一個字元。

  注意,如果接的不是八進位制位,那麼\會自動轉化成\,代表’'字元;\不能單獨結尾。

  s = 'abc\6' # 'abc\x06'

  s = 'abc\11' # 'abc\t'

  s = 'abc\555' # 'abcŭ'

  s = 'abc\2222222' # 'abc\x9b333333''

  s = 'abc\ABC' # 'abc\\ABC'

  s = 'abc\' # SyntaxError: EOL while scanning string literal

  \0與’ ‘(空格字串)不相同。

  r關閉轉義

  # 下述兩個字串相同

  'C:\\MyFile\\'

  r'C:\MyFile\'

  三重引號表示字串塊,常用於程式碼中大段註釋。

  索引和分片

  索引可為正也可為負。從左至右時,0為第一個元素;從右至左時,-1為第一個元素。

  分片操作會返回一個新的物件。

  分片操作有步進值。S[I:J:K]中,K就是步進值,可以為負數,不能為0。步進值表示每隔多少個元素提取一次。注意,步進值為負數時,I需大於J。分片操作中,[::-1]表示倒序,較常用。

  a = 'abcdefghijklmn'

  a[0:5] # 'abcde'

  a[5:0] # ''

  a[0:6:2] # 'ace'

  a[9:5:-3] # 'jg'

  a[::-1] # 'nmlkjihgfedcba'

  原處修改字串

  replace()函式。

  先將字串轉換成列表,再修改列表,最後使用join方法進行合併。

  S = 'abcdefg'

  L = list(S)

  L[0] = 'x'

  L[1] = 'y'

  S = ''.join(L) # 'xycdefg'

  字串格式化

  格式化表示式

  在%運算子的左側放置一個需要進行格式化的字串,這個字串帶有一個或多個嵌入的轉換目標,都以%開頭。

  在%運算子右側放置一個(或多個,嵌入到元祖中)物件,這些物件將會插入到左側想讓Python進行格式化字串的一個(或多個)轉換目標的位置上去。

  由於字串的性質,格式化會返回新的字串,而不是對原字串進行修改。

  程式碼意義

  s字串(或任何物件)

  r同s,但使用repr,而不是str

  c字元

  d十進位制(整數)

  i整數

  u無號(整數)

  o八進位制整數

  x十六進位制整數

  X同x,但列印大寫

  e浮點整數,使用科學計數法表示,預設儲存小數點後六位

  E同e,但列印大寫

  f浮點十進位制,預設儲存小數點後六位

  F浮點十進位制,預設儲存小數點後六位

  g浮點e或者f,根據數的大小決定(太小或太大就使用科學計數法,否則直接使用浮點數)

  G浮點E或者f,根據數的大小決定(太小或太大就使用科學計數法,否則直接使用浮點數)

  %常量%

  標準的表示式

  %[(name)][flags][width][.precision]typecode

  name放置一個字典的鍵。

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

  flags中“-”表示左對齊,"+"表示保留正負號,“0"表示補零,”#"後接o或者x表示八進位制或者十六進位制。

  x = 1.23456789 大連人流醫院

  '%-6.2f | %05.2f | %+06.1f' % (x, x, x) # '1.23 | 01.23 | +001.2'

  x = 123456789

  '%#o | %#x' % (x, x) # '0o726746425 | 0x75bcd15'

  width和precision可編碼為一個"*",指定它們應該從輸入值的下一項取值。

  x = 1.23456789

  '%*.*f' % (7, 4, x) # ' 1.2346'

  g和G的顯示浮點數或科學計數法,取決於資料大小。

  '%g | %g | %g | %G | %G | %G' % (1.23456, 0.00000000000123456, 12345600000000, 1.23456, 0.00000000000123456, 12345600000000) # '1.23456 | 1.23456e-12 | 1.23456e+13 | 1.23456 | 1.23456E-12 | 1.23456E+13'

  格式化呼叫方法

  在Python 2.6及之後的版本中與Python 3.0及之後的版本中,使用新的字串物件的format方法,使用主體字串作為模板,並且接受任意多個表示將要根據模板替換的值的引數。花括號透過位置指出替換的目標及將要插入的引數。

  '{motto}, {0} and {food}'.format(32, motto=3.14 , food=[1,2]) # '3.14, 32 and [1, 2]'

  新增鍵,屬性和偏移量。方括號指定字典鍵,點表示位置或關鍵字所引用的一項物件屬性。

  import sys

  'My {1[spam]} runs {0.platform}'.format(sys, {'spam': 'laptop'}) # 'My laptop runs win32'

  格式化字串中的方括號可以指定列表(及其他序列)偏移量以執行索引,但注意只有單個的正的偏移才能在格式化字串中的語法中有效。要指定負的偏移或分片,或者使用任意表示式,必須在格式化自身之外執行表示式。

  somelist = list('SPAM')

  'first={0[0]}, third={0[2]}'.format(somelist) # 'first=S, third=A'

  'first={0}, last={1}'.format(somelist[0], somelist[-1]) # 'first=S, last=M'

  parts = somelist[0], somelist[-1], somelist[1:3]

  'first={0}, last={1}, middle={2}'.format(*parts) # "first=S, last=M, middle=['P', 'A']"

  新增具體格式化

  格式化標準格式

  {format!conversionflag:formatspec}

  fieldname是指定引數的一個數字或關鍵字,後面跟著可選的".name"或"[index]"成分引用。以上第2點的例子說明了這種情況。

  conversionflag可以是r,s或者a,分別是在該值上對repr,str或ascii內建函式的一次呼叫,該點使用較少。

  formatspec指定了如何表示該值,包括字元寬度,對齊方式,補零,小數點精度等細節,並且以一個可選的資料型別編碼結束。組成形式上描述如下:

  [[fill]align][sign][#][0][width][.precision][typecode]

  align可能是<, >, =或^,分別表示左對齊,右對齊,一個標記字元後的補充或居中對齊。可以結合fill值進行填充。

  '{0:<10.2f}'.format(1.234) # '1.23 '

  '{0:>10.2f}'.format(1.234) # ' 1.23'

  '{0:^10.2f}'.format(1.234) # ' 1.23 '

  '{0:7<10.2f}'.format(1.234) # '1.23777777'

  '{0:7>10.2f}'.format(1.234) # '7777771.23'

  '{0:7^10.2f}'.format(1.234) # '7771.23777'

  '{0:7=+10.2f}'.format(1.234) # '+777771.23'

  '{0:7<+10.2f}'.format(1.234) # '+1.2377777'

  '{0:7>+10.2f}'.format(1.234) # '77777+1.23'

  '{0:7^+10.2f}'.format(1.234) # '77+1.23777'

  formatspec也包含巢狀的,只帶有{}的格式化字串,它從引數列表動態地獲取值(和格式化列表中的*很相似)。

  比如,{0:10}意味著一個10字元寬的欄位中的第一個位置引數,{1:<10}意味著第2個位置引數在一個10字元寬度欄位中左對齊,{0.platform:>10}意味著第一個引數的platform屬性在10字元寬度的欄位中右對齊。

  '{0:10} = {1:10}'.format('spam', 123.4567) # 'spam = 123.4567'

  '{0:>10} = {1:<10}'.format('spam', 123.4567) # ' spam = 123.4567 ''{0.platform:>10} = {1[item]:<10}'.format(sys, dict(item='laptop')) # ' win32 = laptop '

  在格式化方法呼叫中,浮點數支援與%表示式中相同的型別程式碼和格式化宣告。例如{2:g}表示,第三個引數預設地根據’g’浮點數表示格式化,{1:.2f}指定了帶有兩個小數位的"f"浮點數格式,{2:06.2f}新增一個6字元寬度的欄位並且在左邊補充0。

  '{0:e}, {1:.3e}, {2:g}'.format(3.14159, 3.14159, 3.14159) # '3.141590e+00, 3.142e+00, 3.14159'

  '{0:f}, {1:.2f}, {2:06.2f}'.format(3.14159, 3.14159, 3.14159) # '3.141590, 3.14, 003.14'

  格式化方法也支援十六進位制,八進位制與二進位制格式。實際上,字串格式化方法是把整數格式化為指定的進位制的某些內建函式的替代方法。

  '{0:X}, {1:o}, {2:b}'.format(255, 255, 255) # 'FF, 377, 11111111'

  格式化引數可以在格式化字串中硬編碼,或者透過巢狀的格式化語法從引數列表動態地獲取,後者很像是格式化表示式中的星號語法。

  '{0:.2f}'.format(1 / 3.0) # '0.33'

  '%.2f' % (1 / 3.0) # '0.33'

  '{0:.{1}f}'.format(1 / 3.0, 4) # '0.3333'

  '%.*f' % (4, 1 / 3.0) # '0.3333'

  在Python 2.6及之後的版本中與Python 3.0及之後的版本中還提供了一種新的內建format函式,用來格式化一個單獨的項,透過執行主體物件方法__format__實現。

  '{0:.2f}'.format(1.2345) # '1.23'

  '%.2f' % 1.2345 # '1.23'

  format(1.2345, '.2f') # '1.23'

  以上,歡迎各位讀者朋友提出意見或建議。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2756126/,如需轉載,請註明出處,否則將追究法律責任。

相關文章