Binary Python 2中二进制文件中的ASCII数字模式匹配

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

我试图读取一个二进制文件,并匹配每个记录中的编号。 如果数字匹配,则记录将被复制到另一个文件。 数字应该出现在每条记录的第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.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内置代码。它不会给您显示的代码带来问题,但这绝对是您应该注意的