python准确判断文件类型
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小时内删除。