最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決python 文本過濾和清理問題

 更新時間:2019年08月28日 09:03:24   作者:IT派森  
文本過濾和清理所涵蓋的范圍非常廣泛,涉及文本解析和數(shù)據(jù)處理方面的問題。這篇文章主要介紹了解決python 文本過濾和清理問題,需要的朋友可以參考下

問題

某些無聊的腳本小子在Web頁面表單中填入了“pýtĥöñ”這樣的文本,我們想以某種方式將其清理掉。

解決方案

文本過濾和清理所涵蓋的范圍非常廣泛,涉及文本解析和數(shù)據(jù)處理方面的問題。在非常簡單的層次上,我們可能會用基本的字符串函數(shù)(例如str.upper()和str.lower())將文本轉(zhuǎn)換為標準形式。簡單的替換操作可通過str.replace()或re.sub()來完成,它們把重點放在移除或修改特定的字符序列上。也可以利用unicodedata.normalize()來規(guī)范化文本。

然而我們可能想更進一步。比方說也許想清除整個范圍內(nèi)的字符,或者去掉音符標志。要完成這些任務,可以使用常被忽視的str.translate()方法。為了說明其用法,假設有如下這段混亂的字符串:

>>> s = 'pytĥon\fis\tawesome\r\n'
>>> s
'pytĥon\x0cis\tawesome\r\n'
>>>

第一步是清理空格。要做到這步,先建立一個小型的轉(zhuǎn)換表,然后使用translate()方法:

>>> remap = {
...   ord('\t') : ' ',
...   ord('\f') : ' ',
...   ord('\r') : None    # Deleted
... }
>>> a = s.translate(remap)
>>> a
'pytĥon is awesome\n'

可以看到,類似t和f這樣的空格符已經(jīng)被重新映射成一個單獨的空格?;剀嚪鹯已經(jīng)完全被刪除掉了。

可以利用這種重新映射的思想進一步構(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)))
...
>>> b = unicodedata.normalize('NFD', a)
>>> b
'pytĥon is awesome\n'
>>> b.translate(cmb_chrs)
'python is awesome\n'
>>>

在這個例子中,我們使用dict.fromkeys()方法構(gòu)建了一個將每個Unicode組合字符都映射為None的字典。

原始輸入會通過unicodedata.normalize()方法轉(zhuǎn)換為分離形式,然后再通過translate()方法刪除所有的重音符號。我們也可以利用相似的技術(shù)來去掉其他類型的字符(例如控制字符)。

下面來看另一個例子。這里有一張轉(zhuǎn)換表將所有的Unicode十進制數(shù)字字符映射為它們對應的ASCII版本:

>>> digitmap = { c: ord('0') + unicodedata.digit(chr(c))
...        for c in range(sys.maxunicode)
...        if unicodedata.category(chr(c)) == 'Nd' }
...
>>> len(digitmap)
460
>>> # Arabic digits
>>> x = '\u0661\u0662\u0663'
>>> x.translate(digitmap)
'123'
>>>

另一種用來清理文本的技術(shù)涉及I/O解碼和編碼函數(shù)。大致思路是首先對文本做初步的清理,然后通過結(jié)合encode()和decode()操作來修改或清理文本。示例如下:

>>> a
'pytĥon is awesome\n'
>>> b = unicodedata.normalize('NFD', a)
>>> b.encode('ascii', 'ignore').decode('ascii')
'python is awesome\n'
>>>

這里的normalize()方法先對原始文本做分解操作。后續(xù)的ASCII編碼/解碼只是簡單地一次性丟棄所有不需要的字符。很顯然,這種方法只有當我們的最終目標就是ASCII形式的文本時才有用。

討論

文本過濾和清理的一個主要問題就是運行時的性能。一般來說操作越簡單,運行得就越快。對于簡單的替換操作,用str.replace()通常是最快的方式——即使必須多次調(diào)用它也是如此。比方說如果要清理掉空格符,可以編寫如下的代碼:

def clean_spaces(s):
  s = s.replace('\r', '')
  s = s.replace('\t', ' ')
  s = s.replace('\f', ' ')
return s

如果試著調(diào)用它,就會發(fā)現(xiàn)這比使用translate()或者正則表達式的方法要快得多。

另一方面,如果需要做任何高級的操作,比如字符到字符的重映射或刪除,那么translate()方法還是非??斓摹?/p>

從整體來看,我們應該在具體的應用中去進一步揣摩性能方面的問題。不幸的是,想在技術(shù)上給出一條“放之四海而皆準”的建議是不可能的,所以應該嘗試多種不同的方法,然后做性能統(tǒng)計分析。

盡管本節(jié)的內(nèi)容主要關(guān)注的是文本,但類似的技術(shù)也同樣適用于字節(jié)對象(byte),這包括簡單的替換、翻譯和正則表達式。

總結(jié)

以上所述是小編給大家介紹的解決python 文本過濾和清理問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • python 將md5轉(zhuǎn)為16字節(jié)的方法

    python 將md5轉(zhuǎn)為16字節(jié)的方法

    今天小編就為大家分享一篇python 將md5轉(zhuǎn)為16字節(jié)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Django中的FBV和CBV用法詳解

    Django中的FBV和CBV用法詳解

    這篇文章主要介紹了Django中的FBV和CBV用法詳解,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • pytorch 在網(wǎng)絡中添加可訓練參數(shù),修改預訓練權(quán)重文件的方法

    pytorch 在網(wǎng)絡中添加可訓練參數(shù),修改預訓練權(quán)重文件的方法

    今天小編就為大家分享一篇pytorch 在網(wǎng)絡中添加可訓練參數(shù),修改預訓練權(quán)重文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 淺析python中的del用法

    淺析python中的del用法

    python中的del用法比較特殊,新手學習往往產(chǎn)生誤解,弄清del的用法,可以幫助深入理解python的內(nèi)存方面的問題。這篇文章主要介紹了python中的del用法,需要的朋友可以參考下
    2020-09-09
  • Python優(yōu)化代碼的技巧分享

    Python優(yōu)化代碼的技巧分享

    Python?是?一種用著很爽的語言,Python也有著很多特性和技巧,可以幫助我們編寫更高效、更優(yōu)雅、更易維護的代碼,下面小編為大家整理了一些常用的Python代碼優(yōu)化的簡單小技巧,希望對大家有所幫助
    2023-09-09
  • 詳解BeautifulSoup獲取特定標簽下內(nèi)容的方法

    詳解BeautifulSoup獲取特定標簽下內(nèi)容的方法

    這篇文章主要介紹了詳解BeautifulSoup獲取特定標簽下內(nèi)容的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • python的random和time模塊詳解

    python的random和time模塊詳解

    這篇文章主要介紹了python的random和time模塊,具有一定借鑒價值,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10
  • Python+smtplib庫實現(xiàn)郵件發(fā)送功能

    Python+smtplib庫實現(xiàn)郵件發(fā)送功能

    這篇文章主要為大家詳細介紹了Python如何通過smtplib庫實現(xiàn)簡單的郵件發(fā)送功能,文中的示例代碼借鑒一下,有需要的小伙伴可以參考一下
    2025-02-02
  • python實現(xiàn)字符串和字典的轉(zhuǎn)換

    python實現(xiàn)字符串和字典的轉(zhuǎn)換

    這篇文章主要為大家詳細介紹了python實現(xiàn)字符串和字典的轉(zhuǎn)換,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • pyqt5蒙版遮罩mask,setmask的使用

    pyqt5蒙版遮罩mask,setmask的使用

    mask()和setmask()一般是在pyqt繪圖時常見,本文就來介紹一下pyqt5蒙版遮罩mask,setmask的使用,具有一定的參考價值,感興趣的可以了解一下
    2021-06-06

最新評論

临高县| 开化县| 云阳县| 乌拉特后旗| 阿克陶县| 五原县| 武邑县| 策勒县| 涿州市| 镇巴县| 麟游县| 射洪县| 东源县| 泉州市| 买车| 共和县| 延安市| 黎平县| 井研县| 长丰县| 黄陵县| 河南省| 中超| 平江县| 海淀区| 大竹县| 昆山市| 留坝县| 阿尔山市| 水城县| 尚义县| 南昌市| 丰都县| 延边| 宁波市| 富宁县| 台南县| 淮安市| 洛阳市| 诸城市| 天全县|