文件读取和重新解析

2024-07-07 00:09:09 发布

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

我有一种奇怪的行为,我不明白:

如果打开文件,我会找到字节,但每次只能找到一次:

f = open('d:\BB.ki', "rb")
f10 = re.findall( b'\x03\x00\x00\x10''(.*?)''\xF7\x00\xF0', f.read() )
print f10
['1BBBAAAABBBBAAAABBBBAAAABBBBAAAA\x00']

f = open('d:\BB.ki', "rb")
f11 = re.findall( b'\x03\x00\x00\x11''(.*?)''\xF7\x00\xF0', f.read() )
print f11
['2AAABBBBAAAABBBBAAAA\x00']

如果我试图打开文件并得到几个字节,我只得到第一个字节(f11是空的)

f = open('d:\BB.ki', "rb")
f10 = re.findall( b'\x03\x00\x00\x10''(.*?)''\xF7\x00\xF0', f.read() )
f11 = re.findall( b'\x03\x00\x00\x11''(.*?)''\xF7\x00\xF0', f.read() )
print f10,f11
['1BBBAAAABBBBAAAABBBBAAAABBBBAAAA\x00'] **[]**

我可以用线圈或类似的东西吗?你知道吗

谢谢


Tags: reread字节openprintbbx00x03
2条回答

在调用f.read()之后,没有更多的字节可读取,因此对f.read()的第二次调用将返回一个空字符串。存储f.read()的结果,而不是读取两次:

s = f.read()
f10 = re.findall( b'\x03\x00\x00\x10''(.*?)''\xF7\x00\xF0', s)
f11 = re.findall( b'\x03\x00\x00\x11''(.*?)''\xF7\x00\xF0', s) 

您可能还希望只扫描一次数据,找到两个表达式:

matches = re.findall( b'\x03\x00\x00[\x10\x11]''(.*?)''\xF7\x00\xF0', s)

如果您的文件包含字节'\x03\x00\x00\x10\x03\x00\x00\x11_\xF7\x00\xF0',您提出的方法将找到两个重叠的匹配(\x03\x00\x00\x11__),而单扫描方法只找到一个匹配。你知道吗

f.read()使用整个文件。只有f10会出现。你知道吗

试试这个。你知道吗

 for line in open('d:\BB.ki', "rb").readlines():
    f10 = re.findall( b'\x03\x00\x00\x10''(.*?)''\xF7\x00\xF0', line )
    f11 = re.findall( b'\x03\x00\x00\x11''(.*?)''\xF7\x00\xF0', line )

相关问题 更多 >