我正在python中处理大量的CSV文件。这些文件是从外部组织接收的,并使用一系列编码进行编码。我想找到一种自动方法来删除以下内容:
我有一个名为'查找并替换它'的产品!这将使用正则表达式,因此使用正则表达式解决上述问题的方法将非常有用。
谢谢
答案 0 :(得分:6)
您可能感兴趣的替代方案是:
import string
clean = lambda dirty: ''.join(filter(string.printable.__contains__, dirty))
它只是从它收到的脏字符串中过滤掉所有不可打印的字符。
>>> len(clean(map(chr, range(0x110000))))
100
答案 1 :(得分:5)
试试这个:
clean = re.sub('[\0\200-\377]', '', dirty)
这个想法是匹配每个NUL或“高ASCII”字符(即\ 0和那些不适合7位的字符)并删除它们。您可以在找到它们时添加更多字符,例如ASCII ESC或BEL。
或者这个:
clean = re.sub('[^\040-\176]', '', dirty)
这个想法只允许有限范围的“可打印ASCII”,但请注意,这也会删除换行符。如果您想保留换行符或标签符号等,只需将它们添加到括号中即可。
答案 2 :(得分:2)
用空白替换任何不理想的字符(删除它):
clean = re.sub('[^\s!-~]', '', dirty)
这允许所有空格(空格,换行符,制表符等)和所有“普通”字符(!
是第一个ascii可打印,~
是最后一个ascii可打印在十进制128下。)< / p>
答案 3 :(得分:0)
由于这已在Google上显示,并且我们不再针对Python 2.x,因此我可能应该提到字符串上的isprintable
方法。
这不是完美的,因为它认为空格是可打印的,而换行符和制表符却是不可打印的,但是我可能会做这样的事情:
whitespace_normalizer = re.compile('\s+', re.UNICODE)
cleaner = lambda instr: ''.join(x for x in whitespace_normalizer.sub(' ', instr) if x.isprintable())
regex进行类似HTML的空格折叠(即,将Unicode定义的空白范围转换为单个空格),然后lambda剥离除Unicode分类为“ Separator”或“ Other”的空格以外的所有字符。
然后您将得到如下结果:
>>> cleaner('foo\0bar\rbaz\nquux\tspam eggs')
'foobar baz quux spam eggs'