【Python】判断文件类型(格式)
识别文件真实的格式 属性 后缀
·
判断文件的真实格式
对一个文件来说,文件的后缀是可以随意修改的,但是如果改的时间比较长,可能就不知道原本的文件格式是啥,不匹配的文件格式,在Windows上,大多数情况是无法正常打开的。因此可以根据文件前几个字符的特征码来判断文件真实的格式
# -*- coding:utf-8 -*-
# @FileName :file_type.py
# @DateTime :2022/4/29 10:44
# @Author :wanglb
import struct
type_dict = {
'424D': 'bmp',
'FFD8FF': 'jpg',
'2E524D46': 'rm',
'4D546864': 'mid',
'89504E47': 'png',
'47494638': 'gif',
'49492A00': 'tif',
'41433130': 'dwg',
'38425053': 'psd',
'2142444E': 'pst',
'FF575043': 'wpd',
'AC9EBD8F': 'qdf',
'E3828596': 'pwl',
'504B0304': 'zip',
'52617221': 'rar',
'57415645': 'wav',
'41564920': 'avi',
'2E7261FD': 'ram',
'000001BA': 'mpg',
'000001B3': 'mpg',
'6D6F6F76': 'mov',
'7B5C727466': 'rtf',
'3C3F786D6C': 'xml',
'68746D6C3E': 'html',
'D0CF11E0': 'doc/xls',
'255044462D312E': 'pdf',
'CFAD12FEC5FD746F': 'dbx',
'3026B2758E66CF11': 'asf',
'5374616E64617264204A': 'mdb',
'252150532D41646F6265': 'ps/eps',
'44656C69766572792D646174653A': 'eml'
}
max_len = len(max(type_dict, key=len)) // 2
def get_filetype(filename):
# 读取二进制文件开头一定的长度
with open(filename, 'rb') as f:
byte = f.read(max_len)
# 解析为元组
byte_list = struct.unpack('B' * max_len, byte)
# 转为16进制
code = ''.join([('%X' % each).zfill(2) for each in byte_list])
# 根据标识符筛选判断文件格式
result = list(filter(lambda x: code.startswith(x), type_dict))
if result:
return type_dict[result[0]]
else:
return 'unknown'
if __name__ == '__main__':
p = r'D:\pic1.rar''
print(get_filetype(p))
返回结果为 rar
如果我手动修改了文件的后缀,程序运行结果依旧是rar
,可以方便我们对于一个文件真实格式的判断
另一个使用场景为,一个png格式的图片,如果手动改为jpg格式,虽然可以正常打开,但是在某些程序中,运行可能就会不正常,因此,文件的真实格式还是非常重要的
更多推荐
已为社区贡献1条内容
所有评论(0)