我想用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个字符。
答案 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