从文本文件中删除不可打印的"gremlin"字符

Joh*_*man 8 python regex encoding

我在python中处理大量的CSV文件.这些文件是从外部组织接收的,并使用一系列编码进行编码.我想找到一个自动方法来删除以下内容:

  • 非ASCII字符
  • 控制字符
  • 空(ASCII 0)字符

我有一个名为"查找并替换它"的产品!那会使用正则表达式,所以用正则表达式解决上面的方法会非常有帮助.

谢谢

Noc*_*wer 6

您可能感兴趣的另一种选择是:

import string
clean = lambda dirty: ''.join(filter(string.printable.__contains__, dirty))
Run Code Online (Sandbox Code Playgroud)

它只是从它收到的脏字符串中过滤掉所有不可打印的字符.

>>> len(clean(map(chr, range(0x110000))))
100
Run Code Online (Sandbox Code Playgroud)


Joh*_*nck 5

试试这个:

clean = re.sub('[\0\200-\377]', '', dirty)
Run Code Online (Sandbox Code Playgroud)

想法是匹配每个NUL或"高ASCII"字符(即\ 0和那些不适合7位的字符)并删除它们.您可以在找到它们时添加更多字符,例如ASCII ESC或BEL.

或这个:

clean = re.sub('[^\040-\176]', '', dirty)
Run Code Online (Sandbox Code Playgroud)

这个想法只允许有限范围的"可打印ASCII",但请注意,这也会删除新行.如果您想保留换行符或标签符号等,只需将它们添加到括号中即可.