python cookbook 2字符串(3)

11從字符串中清除不想保留的字符python

能夠用strip()清除字符串,默認清除空格,換行符,也能夠提供須要清除的字符,還有lstrip()和rstrip().函數

>>> t = '-----hello====='
>>> t.strip()
'-----hello====='
>>> t.strip('-')
'hello====='
>>> t.strip('-=')
'hello'
須要注意一點,strip()沒法清除字符串中間的字符,能夠用replace或常量表達式
>>> s=' hello  world'
>>> s.replace('e','')
' hllo  world'
>>> import re
>>> re.sub('ll','',s)
' heo  world'

12清洗文本,僅針對python3(python2和3編碼方式不一樣)ui

>>> s = 'pýtĥöñ\fis\tawesome\r\n'
>>> s
'pýtĥöñ\x0cis\tawesome\r\n'
>>> remap = {ord('\t') : ' ',
... ord('\f') : ' ',#換頁
... ord('\r') : None
... }
>>> a = s.translate(remap)
>>> a
'pýtĥöñ is awesome\n'
>>> import unicodedata
>>> b = unicodedata.normalize('NFD', a)#特殊字符所有采用兩個字符組合的形式分解
>>> b
'pýtĥöñ is awesome\n'
>>> b.encode('ascii', 'ignore').decode('ascii')#忽略其中有異常的編碼Unicode---ascii(過濾掉異常字符)-----Unicode
'python is awesome\n'
>>> b.encode('ascii', 'ignore')
b'python is awesome\n'

str.replace()速度更快一些,即便是屢次運行,也比translate()快一些
編碼

13文本的排版code

>>> text = 'Hello World'
>>> text.ljust(20)
'Hello World         '
>>> text.rjust(20)
'         Hello World'
>>> text.center(20)
'    Hello World     '
還能夠提供一些填充符
>>> text.rjust(20,'=')
'=========Hello World'
>>> text.center(20,'*')
'****Hello World*****'
format也能夠用於簡單排版,<^>表明左中右
>>> format(text, '>20')
'         Hello World'
>>> format(text, '<20')
'Hello World         '
>>> format(text, '^20')
'    Hello World     '
也能夠指定填充符
>>> format(text, '=>20s')
'=========Hello World'
>>> format(text, '*^20s')
'****Hello World*****'
format還能夠按指定格式輸出多個字符和指定小數位數
>>> '{:>10s} {:>10s}'.format('Hello', 'World')
'     Hello      World'
>>> x = 1.2345
>>> format(x, '^10.2f')
'   1.23   '
一些老代碼中還可能見到以下形式,不推薦使用
>>> '%-20s' % text
'Hello World         '
>>> '%20s' % text
'         Hello World'

14組合鏈接字符串orm

join能夠拼接list
>>> parts = ['Is', 'Chicago', 'Not', 'Chicago?']
>>> ' '.join(parts)
'Is Chicago Not Chicago?'
>>> a = 'Is Chicago'
>>> b = 'Not Chicago?'
也能夠用+拼接,注意+拼接不是最有效,每次拼接都至關於建立了一個新的對象,推薦用extend和join
>>> a + ' ' + b
'Is Chicago Not Chicago?'
也能夠採用沒有+的拼接
>>> a = 'Hello' 'World'
>>> a
'HelloWorld'
#若是僅僅是爲了打印,python3中提供了分隔符標誌位
print(a, b, c, sep=':')
對於一些IO操做,須要慎重考慮,若是兩個字符串很小,version1比較合適,因爲一些內在的IO系統調用的消耗
# Version 1 
f.write(chunk1 + chunk2)
# Version 2 
f.write(chunk1)
f.write(chunk2)
可是若是字符串較大,version2更有效,避免建立臨時str變量和拷貝的內存消耗
也能夠考慮用yield生成器,避免過多的內存消耗

15字符串中插入變量對象

>>> s = '{name} has {n} messages.'
>>> s.format(name='Guido', n=37)
'Guido has 37 messages.'
>>> name = 'Guido'
>>> n = 37
>>> s.format_map(vars())#***僅python3提供
#內建的 vars()函數接受類對象做爲參數,返回類的__dict__屬性的內容。
'Guido has 37 messages.'
#format和format_map在變量缺失時會拋出異常
能夠在一個字典類中定義一個__missing__方法
>>> class safesub(dict):
...      def __missing__(self, key):
...          return '{' + key + '}'
... 
>>> del n
>>> s.format_map(safesub(vars()))
'Guido has {n} messages.'
相似的還可使用string.Template,可是更推薦使用format.
>>> import string
>>> s = string.Template('$name has $n messages.')
>>> s.substitute(vars())
'Guido has 37 messages.'
相關文章
相關標籤/搜索