我创建了简单的脚本来比较实际的文件类型和扩展名。我不知道为什么我无法搜索从file.read(3)
返回的密钥的字典。如果我手动输入密钥或使用下面的sig
,一切正常。
file_sigs = {b'\xff\xd8\xff':('JPEG','.jpg'), b'\x46\x4f\x52':('GIF','.gif')}
file = open("ggg.jpg", "rb")
sig = file.read(3)
ext = os.path.splitext('ggg.jpg')[1]
if sig in file_sigs:
#print(file_sigs[sig])
if ext in file_sigs[b'\xff\xd8\xff'][1]:
print('match')
else:
print('no match')
else:
print('no such signature')
答案 0 :(得分:0)
旁注:调用file.read(3)
会使读头向前移动3个字节。因此,为了从某个位置x
重新读取文件(包括开头),您需要调用file.seek(x)
。
这是你想要做的吗?这个脚本适用于python3.6。它与您发布的脚本基本相同,但有一些细微的变化。
import os
from sys import argv
file_sigs = {
b'\xff\xd8\xff': (
'.jpeg',
'.jpg'
),
b'\x46\x4f\x52': (
'.gif'
)
}
file = open(argv[1], "rb")
ext = os.path.splitext(argv[1])[1]
if ext in file_sigs[file.read(3)]:
print('Matching extension:', ext)
else:
print('no such signature')
输出python2.7
↳ python2 a.py ggg.jpg
('Matching extension:', '.jpg')
输出python3.6
↳ python a.py ggg.jpg
Matching extension: .jpg