python通过文件头判断文件类型

 更新时间:2015年10月30日 15:46:31   投稿:lijiao  
这篇文章主要介绍了python通过文件头判断文件类型,需要的朋友可以参考下

对于提供上传的服务器,需要对上传的文件进行过滤。

本文为大家提供了python通过文件头判断文件类型的方法,避免不必要的麻烦。

分享代码如下

import struct 
 
# 支持文件类型 
# 用16进制字符串的目的是可以知道文件头是多少字节 
# 各种文件头的长度不一样,少半2字符,长则8字符 
def typeList(): 
  return { 
    "52617221": EXT_RAR, 
    "504B0304": EXT_ZIP} 
 
# 字节码转16进制字符串 
def bytes2hex(bytes): 
  num = len(bytes) 
  hexstr = u"" 
  for i in range(num): 
    t = u"%x" % bytes[i] 
    if len(t) % 2: 
      hexstr += u"0" 
    hexstr += t 
  return hexstr.upper() 
 
# 获取文件类型 
def filetype(filename): 
  binfile = open(filename, 'rb') # 必需二制字读取 
  tl = typeList() 
  ftype = 'unknown' 
  for hcode in tl.keys(): 
    numOfBytes = len(hcode) / 2 # 需要读多少字节 
    binfile.seek(0) # 每次读取都要回到文件头,不然会一直往后读取 
    hbytes = struct.unpack_from("B"*numOfBytes, binfile.read(numOfBytes)) # 一个 "B"表示一个字节 
    f_hcode = bytes2hex(hbytes) 
    if f_hcode == hcode: 
      ftype = tl[hcode] 
      break 
  binfile.close() 
  return ftype 
 
if __name__ == '__main__': 
  print filetype(Your-file-path)

常见文件格式的文件头

文件格式 文件头(十六进制)
JPEG (jpg) FFD8FF
PNG (png) 89504E47
GIF (gif) 47494638
TIFF (tif) 49492A00
Windows Bitmap (bmp) 424D
CAD (dwg) 41433130
Adobe Photoshop (psd) 38425053
Rich Text Format (rtf) 7B5C727466
XML (xml) 3C3F786D6C
HTML (html) 68746D6C3E
Email [thorough only] (eml) 44656C69766572792D646174653A
Outlook Express (dbx) CFAD12FEC5FD746F
Outlook (pst) 2142444E
MS Word/Excel (xls.or.doc) D0CF11E0
MS Access (mdb) 5374616E64617264204A

以上就是本文的全部内容,希望对大家的学习有所帮助。

相关文章

  • python占位符输入方式实例

    python占位符输入方式实例

    在本篇文章中小编给大家分享了关于python占位符怎么输入的相关知识点内容,有兴趣的朋友们可以学习下。
    2019-05-05
  • OpenCV-Python实现轮廓的特征值

    OpenCV-Python实现轮廓的特征值

    轮廓自身的一些属性特征及轮廓所包围对象的特征对于描述图像具有重要意义。本篇博文将介绍几个轮廓自身的属性特征及轮廓包围对象的特征,感兴趣的可以了解一下
    2021-06-06
  • Python 分享10个PyCharm技巧

    Python 分享10个PyCharm技巧

    这篇文章主要介绍了Python 分享10个PyCharm技巧,今天要跟大家分享几个PyCharm小技巧,帮助大家提升工作效率!,需要的朋友可以参考下
    2019-07-07
  • 手把手教你jupyter notebook更换环境的方法

    手把手教你jupyter notebook更换环境的方法

    在日常使用jupyter-notebook时,可能会碰到需要切换不同虚拟环境的场景,下面这篇文章主要给大家介绍了关于jupyter notebook更换环境的方法,需要的朋友可以参考下
    2023-05-05
  • Django接受前端数据的几种方法总结

    Django接受前端数据的几种方法总结

    下面小编就为大家带来一篇Django接受前端数据的几种方法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • 详解Python中的相对导入和绝对导入

    详解Python中的相对导入和绝对导入

    绝对导入是指跳过包内,直接搜索 sys.path ,在sys.path的基础上进行我们的模块搜索。相对导入是指先包内,再包外,再,,,那么下面这篇文章主要给大家介绍了Python中的相对导入和绝对导入,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • Python利用Charles 实现全部自动答题思路流程分析

    Python利用Charles 实现全部自动答题思路流程分析

    这篇文章主要介绍了Python利用Charles 实现全部自动答题思路流程分析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Qt通过QGraphicsview实现简单缩放及还原效果

    Qt通过QGraphicsview实现简单缩放及还原效果

    本文主要介绍通过QGraphicsview实现简单的缩放以及缩放后还原原始大小,通过scale可以对view进行放大或缩小,具体内容详情跟随小编一起看看吧
    2021-09-09
  • Python+OpenCV实现图片及视频中选定区域颜色识别

    Python+OpenCV实现图片及视频中选定区域颜色识别

    这篇文章主要为大家详细介绍了如何利用Python+OpenCV实现图片及视频中选定区域颜色识别功能,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-07-07
  • Matplotlib animation模块实现动态图

    Matplotlib animation模块实现动态图

    这篇文章主要介绍了Matplotlib animation模块实现动态图,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02

最新评论