Python使用re解析文件失败

时间:2014-11-14 15:39:47

标签: python regex encoding

我有一个主要是ascii文件的文件,但有时会出现一些非ascii字符。我想解析这些文件并提取以某种方式标记的行。以前我用过sed,但现在我需要在python中做同样的事情。 (当然我仍然可以使用os.system,但我希望更方便)。

我正在关注。

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))

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

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.4/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0x81 in position 2227: ordinal not in range(128)

如果我从第二行删除编码参数,i。即使用默认编码,即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?

UPD。

感谢@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))

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

0 个答案:

没有答案