我处理在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,我将检查下面的任何解决方案是否做同样的事情,并勾选第一个答案。 –