python通过文件头判断文件类型
对于提供上传的服务器,需要对上传的文件进行过滤。
本文为大家提供了python通过文件头判断文件类型的方法,避免不必要的麻烦。
分享代码如下
importstruct #支持文件类型 #用16进制字符串的目的是可以知道文件头是多少字节 #各种文件头的长度不一样,少半2字符,长则8字符 deftypeList(): return{ "52617221":EXT_RAR, "504B0304":EXT_ZIP} #字节码转16进制字符串 defbytes2hex(bytes): num=len(bytes) hexstr=u"" foriinrange(num): t=u"%x"%bytes[i] iflen(t)%2: hexstr+=u"0" 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"*numOfBytes,binfile.read(numOfBytes))#一个"B"表示一个字节 f_hcode=bytes2hex(hbytes) iff_hcode==hcode: ftype=tl[hcode] break binfile.close() returnftype if__name__=='__main__': printfiletype(Your-file-path)
常见文件格式的文件头
文件格式文件头(十六进制)
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/Excel(xls.or.doc)D0CF11E0
MSAccess(mdb)5374616E64617264204A
以上就是本文的全部内容,希望对大家的学习有所帮助。