计算二进制文件Python 2X中的出现次数

时间:2015-04-11 13:19:42

标签: python python-2.7 count binary

我想用Python 2.7.3计算二进制文件中特定标题部分的出现次数。我已经找到了大量的例子来计算.txt类型文件中的出现次数以及对行进行计数,但是关于计算二进制文件中字节序列的信息很少。

您会想到使用二进制中的ASCII字符来使用字符串进行搜索。

十六进制的标题部分是ascii中的"28 00 28 00 28 00""( ( ( "

我认为代码会是这样的:

total = 0
for line in f:
    if "( ( ( " in line:
        total += 1
f.close()
print "%s" % total 

但它似乎没有计算一次,它会打印出来的线条长度为120个字符。

1 个答案:

答案 0 :(得分:1)

你有 NULL 字节,而不是空格。使用'( ( ( '正在寻找28 20 28 20 28 20,而不是28 00 28 00 28 00

使用\x00创建此类字节:

if "(\x00(\x00(\x00" in line:

循环中的二进制文件可能没有意义;这只有在该文件中实际存在\n个字节时才有效。

您可以在块中搜索文件而不是行:

previous = ''
total = 0
for chunk in iter(lambda: f.read(2048), ''):
    if "(\x00(\x00(\x00" in previous + chunk:
        total += 1
    previous = chunk[-5:]  # ensure we don't miss matches at boundaries