python准确判断⽂件类型
判断⽂件类型在开发中⾮常常见的需求,怎样才能准确的判断⽂件类型呢?⾸先⼤家想到的是⽂件的后缀,但是⾮常遗憾的是这种⽅法是⾮常不靠谱的,因为⽂件的后缀是可以随意更改的,⽽⼤家都知道后缀在linux系统下是没有这个概念的,所以仅靠判断后缀⽆法准确判断⼀个⽂件的类型。还有第⼆种⽅法是判断⽂件的头,每种⽂件在⽂件的头中会标识这种⽂件的类型,下⾯我们来看看如何⽤python来判断⽂件的类型。
python通过⽂件头判断⽂件类型的⽅法:
#!/usr/bin/python
#pythontab提醒您注意中⽂编码问题,指定编码为utf-8
#-*-coding:utf-8-*-
importstruct地震怎么办
#⽀持⽂件类型
#⽤16进制字符串的⽬的是可以知道⽂件头是多少字节
#各种⽂件头的长度不⼀样,少则2字符,长则8字符
deftypeList():
return{
FFD8FF:JPEG,
89504E47:PNG}
#字节码转16进制字符串
defbytes2hex(bytes):
num=len(bytes)
hexstr=u
foriinrange(num):海洋运输
t=u%x%bytes[i]
iflen(t)%2:
hexstr+=u0
hexstr+=t
returnhexstr.upper()
#获取⽂件类型
deffiletype(filename):
binfile=open(filename,'rb')#必需⼆制字读取
tl=typeList()
ftype='unknown'
forhcodeintl.keys():
numOfBytes=len(hcode)/2#需要读多少字节
binfile.seek(0)#每次读取都要回到⽂件头,不然会⼀直往后读取
hbytes=struct.unpack_from(B*ad(numOfBytes))#⼀个B表⽰⼀个字节 f_hcode=bytes2hex(hbytes)
iff_hcode==hcode:
ftype=tl[hcode]
break
binfile.close()
returnftype
if__name__=='__main__':
计算机专业香到什么程度? printfiletype('./test.jpg')清明节放假多少天?
常见⽂件格式的⽂件头
⽂件格式⽂件头(⼗六进制)
JPEG(jpg)FFD8FF
PNG(png)89504E47
GIF(gif)47494638
TIFF(tif)49492A00中国界首打一地名
WindowsBitmap(bmp)424D
CAD(dwg)41433130
AdobePhotoshop(psd)38425053
RichTextFormat(rtf)7B5C727466
XML(xml)3C3F786D6C
HTML(html)68746D6C3E赵丽颖陷害袁姗姗
Email[thoroughonly](eml)44656C69766572792D646174653A
OutlookExpress(dbx)CFAD12FEC5FD746F
Outlook(pst)2142444E
MSWord/doc)D0CF11E0
MSAccess(mdb)5374616E64617264204A
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论