我處理在Python大量的CSV文件。這些文件是從外部組織接收的,並用一系列編碼進行編碼。我想找到一個自動化的方法來刪除以下內容:刪除不可打印的「小鬼」從文本文件字符
- 非ASCII字符
- 控制字符
- 空(ASCII 0)字符
我有一種名爲「查找並替換它!'那將使用正則表達式,所以用正則表達式解決上述問題的方法將非常有用。
謝謝
我處理在Python大量的CSV文件。這些文件是從外部組織接收的,並用一系列編碼進行編碼。我想找到一個自動化的方法來刪除以下內容:刪除不可打印的「小鬼」從文本文件字符
我有一種名爲「查找並替換它!'那將使用正則表達式,所以用正則表達式解決上述問題的方法將非常有用。
謝謝
您可能會感興趣的另一種方法是:
import string
clean = lambda dirty: ''.join(filter(string.printable.__contains__, dirty))
它只是從它接收到的髒串過濾掉所有非打印字符。
>>> len(clean(map(chr, range(0x110000))))
100
試試這個:
clean = re.sub('[\0\200-\377]', '', dirty)
的想法是每個NUL或「高ASCII」字符匹配(即\ 0和那些不適合在7位)和刪除。您可以添加更多的字符,例如ASCII ESC或BEL。
或者這樣:
clean = re.sub('[^\040-\176]', '', dirty)
的想法是隻允許有限範圍內「可打印的ASCII,」但請注意,這還將刪除換行符。如果您想保留換行符或製表符等,只需將它們添加到括號中即可。
謝謝。將嘗試今天回來。我不需要保留製表符,但我確實需要換行符(並且希望csv外殼中的有效CR)可以保留,但是需要編碼。 –
更換任何不期望的字符用空白(刪除):
clean = re.sub('[^\s!-~]', '', dirty)
這使得所有的空格(空格,換行,製表符等),以及所有「正常」的字符(!
是第一個ascii可打印和~
是在十進制128下最後ascii可打印)。
'的文件是從外部組織接收,並與一系列encodings'的編碼 - 而這些都是...向他們不要?你有什麼相關的產品與此有關?你想用什麼數據...你真的需要Python嗎? –
好問題。 CSV文件。編碼包括「未知」(根據查找和替換它!),'utf-8','iso-88591-1'等。不能問他們 - 太多的電子郵件太久了。我已經寫了重新格式化CSV文件的Python。這個腳本在大多數情況下都能工作,除非gremlins(某種程度上相當於\ r)搞砸了CSV.reader。刪除非asciis然而編碼將排序我。乾杯! –
感謝所有這些評論。在急於完成工作的過程中,我使用了一些名爲BBEdit的命令,它將刪除'gremlins',例如用python無法識別的編碼編碼的/ r字符(沒有進一步的工作)。現在我知道如何使用BBEdit來識別這些gremlins,我將檢查下面的任何解決方案是否做同樣的事情,並勾選第一個答案。 –