【循序漸進學Python】3. Python中的序列——字符串


字符串是零個或多個的字符所組成的序列,字符串是Python內建的6種序列之一,在Python中字符串是不可變的。

1. 格式化字符串

字符串格式化使用字符串格式化操作符即百分號%來實現。在%左側放置一個字符串(格式化字符串),而右側則放置希望格式化的值(可以是元組或字典等)。

注意

如果格式化里面包含了百分號,那么必須使用%%,這樣Python就不會將百分號誤認為是轉換說明符了。

基本的轉換說明符包含以下部分,注意其中的順序:

  1. %字符:標記轉換說明符的開始
  2. 轉換標識(可選):-表示左對齊;+表示在轉換值之前要加上正負號;""空白字符表示正數之前保留空格;0表示轉換值若位數不夠則用0填充
  3. 最小字段寬度(可選):轉換后的字符串至少應該具有該值指定的寬度。如果是*,則寬度會從值元組中讀出
  4. 點(.)后跟精度值(可選):如果轉換的是實數,精度值就表示出現在小數點后的位數。如果轉換的是字符串,那么該數字就表示最大字段寬度。如果是*,那么精度將會從元組中讀出。
  5. 轉換類型,詳見下表:
字符串格式轉換類型
格式 描述
%c 字符及其ASCII碼
%s 字符串(使用str轉換任意Python對象)
%r 字符串(使用repr轉換任意Python對象)
%d(%i) 有符號整數(十進制)
%u 無符號整數(十進制)
%o 無符號整數(八進制)
%x 無符號整數(十六進制)
%X 無符號整數(十六進制大寫字符)
%e 浮點數字(科學計數法)
%E 浮點數字(科學計數法,用E代替e)
%f(%F) 浮點數字(用小數點符號)
%g 浮點數字(根據值的大小采用%e或%f)
%G 浮點數字(類似於%g)
%p 指針(用十六進制打印值的內存地址)
%n 存儲輸出字符的數量放進參數列表的下一個變量中

 

1.1 簡單轉換

簡單的轉換只需要寫出轉換類型即可,如下:

 1 # --- coding: utf-8 ---
 2 from math import pi
 3 
 4 # 輸出:'price of eggs: $42'
 5 print 'price of eggs: $%d' % 42
 6 
 7 # 輸出:'Hexadecimal price of eggas: 2a'
 8 print 'Hexadecimal price of eggas: %x' % 42
 9 
10 # 輸出:'Pi: 3.141593...'
11 print 'Pi: %f...'% pi
12 
13 # 輸出:'Very inexact estimate of pi: 3'
14 print 'Very inexact estimate of pi: %i' % pi
15 
16 # 輸出:'using str: 42'
17 print 'using str: %s' % 42L
18 
19 # 輸出:'Using repr: 42L'
20 print 'Using repr: %r' %42L

 

1.2 字段寬度和精度

轉換說明符可以包括字段寬度和精度。字段寬度是轉換后的值保留的最小字符個數,精度(對於數字轉換來說)則是結果中應該包含的小數位數,或者(對於字符串轉換來說)是轉換后的值所能包含的最大字符個數。

 1 # --- coding: utf-8 ---
 2 from math import pi
 3 
 4 # 輸出:  3.141593
 5 print '%10f' % pi # 字段寬:10
 6 
 7 # 輸出:      3.14
 8 print '%10.2f' % pi # 字段寬:10,精度:2
 9 
10 # 輸出:3.14
11 print '%.2f' % pi #精度2
12 
13 # 輸出:Guido
14 print '%.5s' % 'Guido van Rossum' # 精度:5
15 
16 # 輸出:Guido(使用元組參數-精度)
17 print '%.*s' % (5,'Guido van Rossum') # 精度:5
18 
19 # 輸出:     Guido(使用元組參數-字段寬,精度)
20 print '%*.*s' % (10,5,'Guido van Rossum') # 字段寬:10,精度:5

 

1.3 符號、對齊和0填充

在字段寬度和精度值之前可以(可選)放置一個"標表",該標表的值可以是:

  • 0(零):表示數字將會用0進行填充
  • +(加號):表示不管是正數還是負數都標示出符號(在對齊時很有用)
  • -(減號):表示左對齊數值
  • 空格:表示正數前加上空格,這對需要對齊正負數時會很有用

具體使用方法可以參考下面的示例:

 1 # --- coding: utf-8 ---
 2 from math import pi
 3 
 4 # 輸出:0000003.14
 5 print '%010.2f' % pi
 6 
 7 # 輸出:3.14
 8 print '%-10.2f' % pi
 9 
10 # 輸出:
11 #    10
12 #   -10
13 print ('% 5d' % 10) + '\n' + ('% 5d' % -10)
14 
15 # 輸出:
16 #   +10
17 #   -10
18 print ('%+5d' % 10) + '\n' + ('%+5d' % -10)

 

2. 常用字符串函數

Python為字符串創建了很多有用的函數,了解更多請參考Python文檔:http://docs.python.org/2/library/string.html,下面例舉了一下常用的字符函數。

 

2.1 find

find函數可以在一個較長的字符串中查找子字符串。並返回子串所在位置的最左端索引,如果沒有找到則返回:-1,如下所示:

 1 # --- coding: utf-8 ---
 2 title = "Monty Python's Flying Circus"
 3 
 4 # 返回:6
 5 print title.find('Python') 
 6 
 7 # 返回:-1
 8 print title.find('ruby')
 9 
10 # 返回:6,提供查找起始點(包含)
11 print title.find('Python',6)
12 
13 # 返回:6,提供查找起始點(包含)和結束點(不包含)
14 print title.find('Python',6,12)

 

2.1 join

join函數用來在隊列中添加元素,和split函數作用相反。如下:

 1 # --- coding: utf-8 ---
 2 seq = ['1','2','3','4','5']
 3 sep = '+'
 4 dirs ='','usr','bin','env'
 5 
 6 # 輸出:1+2+3+4+5
 7 print sep.join(seq)
 8 
 9 # 輸出:/usr/bin/env
10 print '/'.join(dirs)
11 
12 # 輸出:C:\usr\bin\env
13 print 'C:' + '\\'.join(dirs)

 

2.2 lower

lower函數返回字符串的小寫字母版本。如下:

1 # --- coding: utf-8 ---
2 # 輸出:apple
3 print 'APPLE'.lower()

 

2.3 replace

replace函數返回某字符串的所有匹配項均被替換自后得到字符串。如下:

1 # --- coding: utf-8 ---
2 # 輸出:Theez eez a test.
3 print 'This is a test.'.replace('is','eez')

2.4 split

join的逆函數,用來將字符串分割成序列,如下:

 1 # --- coding: utf-8 ---
 2 seq = '1+2+3+4+5'
 3 unix_dirs ='/usr/bin/env'
 4 windows_dir = r'C:\usr\bin\env'   
 5 
 6 print seq.split('+')
 7 print unix_dirs.split('/')
 8 print windows_dir.split('\\')
 9 # 分別打印輸出:
10 # ['1', '2', '3', '4', '5']
11 # ['', 'usr', 'bin', 'env']
12 # ['C:', 'usr', 'bin', 'env']

 

2.5 strip

strip函數剔除字符串兩側空格字符串(默認):

1 # --- coding: utf-8 ---
2 fruit = ' apple and orange '
3 print repr(fruit)
4 print repr(fruit[:].strip())
5 print repr(fruit.strip(' app'))
6 # 分別輸出:
7 # ' apple and orange '
8 # 'apple and orange'
9 # 'le and orange'

 

2.6 translate

translate函數和replace函數一樣,用於替換字符串中的某個部分,但是和replace不同,translate只處理單個字符,而且可以同時進行多個替換。在使用translate函數轉換之前,需要一張轉換表,轉換表中是以某個字符替換某個字符的對應關系,這個表中有256個字符,我們可以通過使用string模塊中的maketrans函數簡化這一操作:

1 # --- coding: utf-8 ---
2 from string import maketrans
3 table = maketrans('cs','kz')
4 # 輸出:thiz iz an inkredible tezt
5 print 'this is an incredible test'.translate(table)

 

參考資料&進一步閱讀

《Python基礎教程》

Learn Python The Hard Way, 2nd Edition

http://www.pythondoc.com/pythontutorial27/index.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM