Python无法使用解析文件

2024-06-28 20:15:09 发布

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

我有一个文件,大部分是ascii文件,但有时会出现一些非ascii字符。我想解析这些文件并提取以某种方式标记的行。以前我使用sed来实现这一点,但是现在我需要在python中使用同样的方法。(当然我还是可以用的操作系统,但我希望有更方便的)。在

我正在跟踪。在

p = re.compile(".*STATWAH ([0-9]*):([0-9]*):([0-9 ]*):([0-9 ]*) STATWAH.*")
f = open("capture_8_8_8__1_2_3.log", encoding="ascii")
fl = filter(lambda line: p.match(line), f)
len(list(fl))

在最后一行,我得到以下错误消息:

^{pr2}$

如果我从第二行删除编码参数,即使用默认编码utf-8,错误如下:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.4/codecs.py", line 313, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x81 in position 2227: invalid start byte

你能帮我做些什么吗?除了从python调用sed之外?在

升级版。在

多亏了@Wooble我找到了答案。在

正确的代码如下所示:

p = re.compile(rb".*STATWAH ([0-9]*):([0-9]*):([0-9 ]*):([0-9 ]*) STATWAH.*")
f = open("capture_8_8_8__1_2_3.log", "rb")
fl = filter(lambda line: p.match(line), f)
len(list(fl))

我以二进制模式打开了文件,还从二进制字符串表示形式编译正则表达式。在


Tags: 文件lambdainreloglineasciiopen