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.'