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


Posted in Python onOctober 30, 2015

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

本文为大家提供了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连接oracle数据库实例
Oct 17 Python
Python 2.7.x 和 3.x 版本的重要区别小结
Nov 28 Python
python通过pil模块获得图片exif信息的方法
Mar 16 Python
Linux 发邮件磁盘空间监控(python)
Apr 23 Python
Python基础语言学习笔记总结(精华)
Nov 14 Python
Django入门使用示例
Dec 12 Python
Python数据类型之Set集合实例详解
May 07 Python
python删除文件夹下相同文件和无法打开的图片
Jul 16 Python
python3正则模块re的使用方法详解
Feb 11 Python
python设置环境变量的作用整理
Feb 17 Python
vscode+PyQt5安装详解步骤
Aug 12 Python
解决numpy数组互换两行及赋值的问题
Apr 17 Python
python制作花瓣网美女图片爬虫
Oct 28 #Python
python制作最美应用的爬虫
Oct 28 #Python
python使用wmi模块获取windows下的系统信息 监控系统
Oct 27 #Python
详解JavaScript编程中的window与window.screen对象
Oct 26 #Python
深入讲解Python中的迭代器和生成器
Oct 26 #Python
Windows下使Python2.x版本的解释器与3.x共存的方法
Oct 25 #Python
解析Python编程中的包结构
Oct 25 #Python
You might like
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
微信支付扫码支付php版
2016/07/22 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
非主流的textarea自增长实现js代码
2011/12/20 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
2014/08/20 Javascript
jQuery图片特效插件Revealing实现拉伸放大
2015/04/22 Javascript
详解JavaScript数组的操作大全
2015/10/19 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
Javascript中的prototype与继承
2017/02/06 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
前端js中的事件循环eventloop机制详解
2019/05/15 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
微信小程序云开发如何使用云函数生成二维码
2019/05/18 Javascript
Python从MP3文件获取id3的方法
2015/06/15 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
解决python tkinter界面卡死的问题
2019/07/17 Python
python mysql断开重连的实现方法
2019/07/26 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
2019/08/08 Python
python 利用zmail库发送邮件
2020/09/11 Python
HTML5的一个显示电池状态的API简介
2015/06/18 HTML / CSS
澳大利亚领先的宠物用品商店:VetSupply
2017/09/08 全球购物
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
意大利灯具购物网站:Lampade.it
2018/10/18 全球购物
法国在线药房:DoctiPharma
2020/10/21 全球购物
Herschel Supply Co.美国:背包、手提袋及配件
2020/11/24 全球购物
建材投资建议书
2014/05/16 职场文书
金融保险专业求职信
2014/09/03 职场文书
幼儿园园长个人总结
2015/03/02 职场文书
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android
HTML5页面打开微信小程序功能实现
2022/09/23 HTML / CSS