Python中文件类型检查器的文件扩展名

时间:2017-11-04 16:47:12

标签: python dictionary

我创建了简单的脚本来比较实际的文件类型和扩展名。我不知道为什么我无法搜索从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')

1 个答案:

答案 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