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

2024-06-16 11:13:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我有一个产品叫“找到并更换它!”这将使用正则表达式,因此使用正则表达式解决上述问题的方法将非常有用。

谢谢你


Tags: 文件csv方法编码产品ascii字符控制字符
4条回答

试试这个:

clean = re.sub('[\0\200-\377]', '', dirty)

其思想是匹配每个NUL或“high ASCII”字符(即0和那些不适合7位的字符)并删除它们。可以在找到字符时添加更多字符,例如ASCII ESC或BEL。

或者这个:

clean = re.sub('[^\040-\176]', '', dirty)

其思想是只允许有限范围的“可打印ASCII”,但请注意,这也会删除换行符。如果要保留换行符或制表符等,只需将它们添加到括号中。

试试这个:

clean = re.sub('[\0\200-\377]', '', dirty)

其思想是匹配每个NUL或“high ASCII”字符(即0和那些不适合7位的字符)并删除它们。可以在找到字符时添加更多字符,如ASCII ESC或BEL。

或者这个:

clean = re.sub('[^\040-\176]', '', dirty)

其思想是只允许有限范围的“可打印ASCII”,但请注意,这也会删除换行符。如果要保留换行符或制表符等,只需将它们添加到括号中。

将任何不需要的字符替换为空白(删除它):

clean = re.sub('[^\s!-~]', '', dirty)

这允许所有空白(空格、换行符、制表符等)和所有“普通”字符(!是第一个可打印的ascii,而~是最后一个可在十进制128下打印的ascii)。

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

import string
clean = lambda dirty: ''.join(filter(string.printable.__contains__, dirty))

它只是从接收到的脏字符串中筛选出所有不可打印的字符。

>>> len(clean(map(chr, range(0x110000))))
100

相关问题 更多 >