python str translate,str.translate() --文本过滤和处理
問題: 想清除整個(gè)范圍的字符,或者去掉音符
1、使用str.translate()
s = 'python\fis\tawesome\r\n'
# 第一步是清理空格,可以先建立一個(gè)小型的轉(zhuǎn)換表,然后使用reanslate()方法
remap = {
ord('\t'): ' ',
ord('\f'): ' ',
ord('\r'): None
}
a = s.translate(remap)
a
Out[3]: 'python is awesome\n'
# 可以利用這種重新映射的思想進(jìn)一步構(gòu)建出更加龐大的轉(zhuǎn)換表。例如:把所有的Unicode組合字符都去掉
import unicodedata
import sys
cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode) if unicodedata.combining(chr(c))) # combining()函數(shù)可對(duì)字符做檢查,判斷它是否為一個(gè)組合型字符
b = unicodedata.normalize('NFD', a) # NFC表示字符應(yīng)該是全組成的(即,如果可能的話就使用單個(gè)代碼點(diǎn));NFD表示應(yīng)該是使用組合字符,每個(gè)字符應(yīng)該是能完全分解開的。
b
Out[9]: 'python is awesome\n'
b.translate(cmb_chrs)
Out[10]: 'python is awesome\n'
2、另外一種清理文本的技術(shù)涉及I/O編碼和解碼函數(shù):先對(duì)文本做初步清理,然后通過結(jié)合encode()和decode()操作來(lái)處理文本
a = 'python is awesome\n'
b = unicodedata.normalize('NFD', a) # 先對(duì)原始文本做分解操作
b.encode('ascii', 'ingore').decode('ascii') # 這種方法只有當(dāng)我們最終的目標(biāo)是ASCII文本時(shí)才有用
Out[11]: 'python is awesome\n'
總結(jié):
1、對(duì)于簡(jiǎn)單的替換操作,用str.replace()通常是最快的方式--即使必須多次調(diào)用也是如此
例:
def clean_spaces():
s = s.replace('\r', '')
s = s.replace('\t', ' ')
s = s.replace('\f', ' ')
return s
2、如果需要做任何高級(jí)的操作,比如字符到字符的重映射或刪除,那么translate()方法還是非常快的。
總結(jié)
以上是生活随笔為你收集整理的python str translate,str.translate() --文本过滤和处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓图标尺寸规范(安卓图标尺寸)
- 下一篇: appium的python教程_移动Ap