【问题标题】:Remove ASCII control characters from text file Python从文本文件 Python 中删除 ASCII 控制字符
【发布时间】:2013-07-05 03:29:38
【问题描述】:

我有一个文本文件,我必须从中读取很多数字(双)。 它具有在文本文件中可见的 ASCII 控制字符,如 DLE、NUL 等。所以 当我阅读它们以仅从一行中获取双精度/整数时,我收到了诸如“无效文字 \x10”之类的错误。下面显示的是我文件的前 2 行。

DLE NUL NUL NUL [1, 167, 133, 6]DLE NUL NUL   
YS FS NUL[0.0, 4.3025989e-07, 1.5446712e-06, 3.1393029e-06, 5.0430463e-06, 7.1382601e-06

如何使用 Python 一次性从文本文件中删除所有这些控制字符?我想 这要在我将文件解析为数字之前完成...

感谢任何帮助!

【问题讨论】:

  • 也许您应该考虑解析它们,以便您知道如何解析文件的其余部分。
  • 但是,在我对它们进行任何形式的阅读之前,我仍然真的需要删除这些字符......

标签: python file-io python-2.7 ascii


【解决方案1】:

使用string.printable

>>> import string
>>> filter(string.printable.__contains__, '\x00\x01XYZ\x00\x10')
'XYZ'

【讨论】:

  • 使用正则表达式(参见this answer)要快一个数量级。
  • @WesleyBaugh,如果速度很重要,您可以使用str.translate
  • @alvas,如果您想使用完全相同的字符,使用unicode(string.printable) 怎么样?
【解决方案2】:

我知道这是很老的帖子,但我正在回答我的想法,它可以帮助其他人。

我做了如下。它将用空字符串替换所有 ASCII 控制字符。

line = re.sub(r'[\x00-\x1F]+', '', line)

Ref: ASCII (American Standard Code for Information Interchange) Code

Ref: Python re.sub()

【讨论】:

    猜你喜欢
    • 2017-05-06
    • 2018-05-26
    • 2016-01-29
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    相关资源
    最近更新 更多