標籤:substitute python 替換字串 values import
3.2字串格式化使用字串格式化操作符即百分比符號%來實現
>>>format = "hello,%s.%s enough for ya?"
>>>values = (‘world‘,‘Hot‘)
>>>print format % values
hello,world.Hot enough for ya?
>>>
格式化字串的%s部分稱為轉換說明符,它們標記了需要插入轉換值的位置.s表示值會被格式化為字串----如果不是字串,則會用str將其轉換為字串.
如果要格式化字串字串裡麵包括百分比符號,那麼必須使用%%
如果格式化實數,可以使用f說明符類型,同時提供所需要的精度
>>> format = "pi with three decimals:%.3f"
>>> from math import pi
>>> print format % pi
pi with three decimals:3.142
>>>
string模組提供另外一種格式化值得方法:模板字串.它的工作方式類似於很多unix shell裡的變數替換.substitute這個模板方法會用傳遞進來的關鍵字參數foo替換字串中的$foo
>>> from string import Template
>>> s = Template(‘$x,glorious $x!‘)
>>> s.substitute(x=‘slurm‘)
‘slurm,glorious slurm!‘
>>>
如果替換欄位是單詞的一部分,那麼參數名就必須用括弧起來,從而準確指明結尾:
>>> s = Template("It‘s ${x}tastic!")
>>> s.substitute(x=‘slurm‘)
"It‘s slurmtastic!"
>>>
可以使用$$插入貨幣符號:
>>> s = Template("Make $$ selling $x!")
>>> s.substitute(x=‘slurm‘)
‘Make $ selling slurm!‘
>>>
除了關鍵字參數之外,還可以使用字典變數提供值/名稱對:
>>> s = Template(‘A $thing must never $action.‘)
>>> d = {}
>>> d[‘thing‘] = ‘gentleman‘
>>> d[‘action‘] = ‘show his socks‘
>>> s.substitute(d)
‘A gentleman must never show his socks.‘
>>>
3.3字串格式化:完整版
格式化操作符的右運算元可以是任何東西,如果是元組或映射類型,那麼字串格式化將會有所不同.
如果需要轉換的元組作為轉換運算式的一部分存在,那麼必須將它用圓括弧括起來,以避免出錯.
>>> ‘%s plus %s equals %s‘ % (1,1,2)
‘1 plus 1 equals 2‘
>>>
1.%字元:標記轉換說明符的開始
2.轉換標誌:-表示靠左對齊;+表示在轉換值之前要加上加號或減號;""表示正數之前保留空格;0表示轉換值若位元不夠則用0填充
3.最小欄位寬度:轉換後的字串至少應該具有該值指定的寬度.如果是*.則寬度會從值元組中讀出.
4.點(.)後跟精度值:如果轉換的是實數,精度值就表示出現在小數點後的位元.如果轉換的是字串,那麼該數字就表示最大欄位寬度.如果是*,那麼精度將會從元組中讀出
5.轉換類型 見書 3-1 表
3-1-1簡單轉換
>>> ‘Price of eggs:$%d‘ % 42
‘Price of eggs:$42‘
>>> ‘Hexadeciaml price of eggs: %x‘ % 42
‘Hexadeciaml price of eggs: 2a‘
>>> from math import pi
>>> ‘Pi:%f...‘ % pi
‘Pi:3.141593...‘
>>> ‘Very inexact estimate of pi: %i‘ %pi
‘Very inexact estimate of pi: 3‘
>>> ‘Using str: %s‘ % 42L
‘Using str: 42‘
>>> ‘Using repr: %s‘ % 42L
‘Using repr: 42‘
>>>
3.3.2欄位寬度和精度
轉換說明符可以包括欄位寬度和精度.欄位寬度是轉換後的值所保留的最小字元個數,精度則是結果中應該包含的小數位元,或者是轉換後的值所能包含的最大字元個數
>>> ‘%10f‘ % pi 欄位寬10
‘ 3.141593‘
>>> ‘%10.2f‘ % pi 欄位寬10 精度2
‘ 3.14‘
>>> ‘%.2f‘ % pi 精度2
‘3.14‘
>>> ‘%.5s‘ % ‘Guido van Rossum‘
‘Guido‘
可以使用* 作為欄位寬度或精度,此時數值會從元組參數中讀出:
>>> ‘%.*s‘ % (5, ‘Guido van Rossum‘)
‘Guido‘
>>> ‘%*.*s‘ % (10,5, ‘Guido van Rossum‘)
‘ Guido‘
>>>
3.3.3符號,對其和0填充
>>> ‘%010.2f‘ % pi
‘0000003.14‘
>>>
3-1字串格式化樣本
#!/usr/bin/env python
width = input(‘Please enter width:‘)
price_width = 10
item_width = width - price_width
header_format = ‘%-*s%*s‘
format = ‘%-*s%*.2f‘
print ‘=‘ * width
print header_format % (item_width,‘Item‘,price_width,‘Price‘)
print ‘-‘ * width
print format % (item_width,‘Apples‘,price_width,0.4)
print ‘=‘ * width
3.4字串方法
儘管字串方法完全來源於string模組,但是這個模組還包括一些不能作為字串方法使用的常量和函數.maketrans函數就是其中之一,後面會將它和translate方法一起介紹,下面是一些有用的字串常量
string.digits:包括數字0~9的字串
string.letters:包含所有字母的字串
string.lowercase:包含所有小寫字母的字串
string.printable:包含所有可列印字元的字串
string.punctuation:包含所有標點的字串
string.uppercase:包含所有大寫字母的字串
3.4.1 find
find方法可以在一個較長的字串中尋找子字串。它返回子串所在位置的最左端索引。如果沒有找到則返回-1
>>> ‘With a moo-moo here,and a moo-moo there‘.find(‘moo‘)
7
>>> title = "Monty Python‘s Flying Circus"
>>> title.find(‘Monty‘)
0
>>> title.find(‘Python‘)
6
>>> title.find(‘Flying‘)
15
>>> title.find(‘Zirquss‘)
-1
>>>
可選的起始點和結束點參數
>>> subject = ‘$$$ Get rich now!!! $$$‘
>>> subject.find(‘$$$‘)
0
>>> subject.find(‘$$$‘,1)
20
>>> subject.find(‘!!!‘)
16
>>> subject.find(‘!!!‘,0,16)
-1
>>>
3.4.2 join
join方法是非常重要的字串方法,它是split方法的逆方法,用來在隊列中添加元素。
>>> seq = [‘1‘,‘2‘,‘3‘,‘4‘,‘5‘]
>>> sep.join(seq)
‘1+2+3+4+5‘
>>>
>>> dirs = ‘‘,‘usr‘,‘bin‘,‘env‘
>>> ‘/‘.join(dirs)
‘/usr/bin/env‘
>>> print ‘C:‘ + ‘\\‘.join(dirs)
C:\usr\bin\env
>>>
需要添加的隊列元素都必須是字串。
3.4.3 lower
lower方法返回字串的小寫字母片
>>> ‘Trondheim Hammer Dance‘.lower()
‘trondheim hammer dance‘
>>>
>>> name = ‘Gumby‘
>>> names = [‘gumby‘,‘smith‘,‘jones‘]
>>> if name.lower() in names: print ‘Found it‘
...
Found it
>>>
另一個string模組的capwords函數
>>> string.capwords("that‘s all,folks")
"That‘s All,folks"
>>>
3.4.4 replace
replace方法返回某字串的所有匹配項均被替換之後得到字串
>>> ‘This is a test‘.replace(‘is‘,‘eez‘)
‘Theez eez a test‘
>>>
3.4.5 split
這是一個非常重要的字串方法,它是join的逆方法,用來將字串分割成序列
>>> ‘1+2+3+4+5‘.split(‘+‘)
[‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘]
>>> ‘/usr/bin/env‘.split(‘/‘)
[‘‘, ‘usr‘, ‘bin‘, ‘env‘]
>>> ‘Using the default‘.split()
[‘Using‘, ‘the‘, ‘default‘]
>>>
3.4.6 strip
返回除兩側空格的字串:
>>> ‘ inernal whitespace is kept ‘.strip()
‘inernal whitespace is kept‘
>>>
它和lower方法一起使用的話就可以很方便的對比輸入的和儲存的值.讓我們回到lower部分中的使用者名稱的例子,假設使用者在輸入名字時無意中在名字後面加上了空格:
>>> names = [‘gumby‘,‘smith‘,‘jones‘]
>>> name = ‘gumby ‘
>>> if name in names : print ‘Found it‘
...
>>> if name.strip() in names: print ‘Found it‘
...
Found it
>>>
也可以指定需要去除的字元,將它們列為參數即可.
>>> ‘***SPAM*for*everyone!!!***‘.strip(‘*!‘)
‘SPAM*for*everyone‘
>>>
3.4.7 translate
translate方法和replace方法一樣,可以替換字串中的某些部分,但是和前者不同的是,translate方法只處理單個字元.它的優勢在於可以同時進行多個替換,有些時候比replace效率高的多.
在使用translate轉換之前,需要先完成一張轉換表.轉換表中是以字元替換某字元的對應關係.因為這個表有多達256個項目,我們還是不要自己寫了,使用string模組裡面的maketrans函數就行.
maketrans函數接受兩個參數:兩個等長的字串,表示第一個字串中的每個字元都用第二個字串中相同位置的字元替換.
>>> from string import maketrans
>>> table = maketrans(‘cs‘,‘kz‘)
>>> len(table)
256
>>> table[97:123]
‘abkdefghijklmnopqrztuvwxyz‘ 字母c和s 分別替換成kz
>>> maketrans(‘‘,‘‘)[97:123]
‘abcdefghijklmnopqrstuvwxyz‘
>>>
建立這個表以後,可以將它用作translate方法的參數,進行字串的轉換如下:
>>> ‘this is an incredible test‘.translate(table)
‘thiz iz an inkredible tezt‘
translate的第二個參數是可選的,這個參數是用來指定需要刪除的字元.
>>> ‘this is an incredible test‘.translate(table,‘ ‘)
‘thizizaninkredibletezt‘
非英語字串的問題
有些時候類似於lower這樣的字串方法並不能如我們所願地進行工作.
本文出自 “linux_oracle” 部落格,請務必保留此出處http://pankuo.blog.51cto.com/8651697/1634648
python之使用字串