我有一种我不理解的奇怪行为:
如果我打开文件,我会找到我的字节,但一次只能找到一次:
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'] **[]**
我可以使用循环或类似的东西吗?
由于
答案 0 :(得分:1)
调用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_
和_
),而单扫描方法只找到一个匹配。
答案 1 :(得分:0)
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 )