Binary Python 2中二进制文件中的ASCII数字模式匹配
我试图读取一个二进制文件,并匹配每个记录中的编号。 如果数字匹配,则记录将被复制到另一个文件。 数字应该出现在每条记录的第24到36个字节之间 脚本将数字作为参数。以下是我使用的脚本:Binary Python 2中二进制文件中的ASCII数字模式匹配,binary,pattern-matching,python-2.6,Binary,Pattern Matching,Python 2.6,我试图读取一个二进制文件,并匹配每个记录中的编号。 如果数字匹配,则记录将被复制到另一个文件。 数字应该出现在每条记录的第24到36个字节之间 脚本将数字作为参数。以下是我使用的脚本: #!/usr/bin/env python # search.py import re import glob import os import binascii list = sys.argv[1:] list.sort() rec_len=452 filelist = glob.glob(os.get
#!/usr/bin/env python
# search.py
import re
import glob
import os
import binascii
list = sys.argv[1:]
list.sort()
rec_len=452
filelist = glob.glob(os.getcwd() + '*.bin')
print('Input File : %s' % filelist)
for file in filelist:
outfile = file + '.out'
f = open(file, "rb")
g = open(outfile, "wb")
for pattern in list:
print pattern
regex_search = re.compile(pattern).search
while True:
buf = f.read(rec_len)
if len(buf) == 0:
break
else:
match = regex_search(buf)
match2=buf.find(pattern)
#print match
#print match2
if ((match2 != -1) | (match != None )):
g.write(buf)
f.close()
g.close()
print ("Done")
我像这样运行它:
python search.py 1234 56789
我正在使用python 2.6。
代码与号码不匹配。
我还尝试在匹配之前使用binascii将数字转换为二进制,但即使这样,它也没有返回任何记录
若我给出任何字符串,它工作正常,但若我给出任何数字作为参数,它不匹配
哪里出错了?通过读取第一个模式检查中的所有字节,您正在耗尽文件缓冲区。因此,第二个模式将永远不会匹配(甚至不会进行尝试),因为在第一个模式的for循环运行期间,通过读取所有记录,您已经到达了文件的末尾
这意味着,如果在这些记录中找不到第一个模式,那么脚本将不会给您任何输出
考虑在while循环的末尾添加f.seek(0)
,或者更改两个循环构造的顺序,以便首先从文件中读取一条记录,然后为参数列表中的每个模式匹配正则表达式
另外,尽量不要使用list
作为数组名称来隐藏python内置代码。它不会给您显示的代码带来问题,但这绝对是您应该注意的