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中的 is 操作符
Dec 26 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
python获取url的返回信息方法
Dec 17 Python
20行python代码实现人脸识别
May 05 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
Aug 12 Python
Python 依赖库太多了该如何管理
Nov 08 Python
Python通过VGG16模型实现图像风格转换操作详解
Jan 16 Python
pytorch实现MNIST手写体识别
Feb 14 Python
Python中Selenium库使用教程详解
Jul 23 Python
python如何操作mysql
Aug 17 Python
python中把元组转换为namedtuple方法
Dec 09 Python
pytorch fine-tune 预训练的模型操作
Jun 03 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
PHP 身份证号验证函数
2009/05/07 PHP
php类的扩展和继承用法实例
2015/06/20 PHP
浅析PHP7新功能及语法变化总结
2016/06/17 PHP
XHTML-Strict 内允许出现的标签
2006/12/11 Javascript
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
Underscore.js 的模板功能介绍与应用
2012/12/24 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
jQuery自带的一些常用方法总结
2014/09/03 Javascript
推荐一个封装好的getElementsByClassName方法
2014/12/02 Javascript
JavaScript中操作Mysql数据库实例
2015/04/02 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
2017/02/10 Javascript
Angular中ng-options下拉数据默认值的设定方法
2017/06/21 Javascript
微信小程序button组件使用详解
2018/01/31 Javascript
浅谈Vue.js路由管理器 Vue Router
2018/08/16 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
2019/02/27 Javascript
[03:00]《DAC最前线》之欧美新秀VS老将
2015/02/01 DOTA
[45:18]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第一场
2018/04/04 DOTA
centos下更新Python版本的步骤
2013/02/12 Python
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
Python中文件的写入读取以及附加文字方法
2019/01/23 Python
详解python websocket获取实时数据的几种常见链接方式
2019/07/01 Python
详解Python中的文件操作
2021/01/14 Python
CSS3 渐变(Gradients)之CSS3 径向渐变
2016/07/08 HTML / CSS
CSS3媒体查询Media Queries基础学习教程
2016/02/29 HTML / CSS
Skyscanner新西兰:全球领先的旅游搜索网站
2019/08/26 全球购物
高分子材料个人求职信范文
2013/09/25 职场文书
实习教师自我鉴定
2013/09/27 职场文书
厨师岗位职责
2013/11/12 职场文书
小学班长竞选演讲稿
2014/04/24 职场文书
关于爱国的标语
2014/06/24 职场文书
2014购房个人委托书范本
2014/10/12 职场文书
党员查摆四风问题思想汇报
2014/10/25 职场文书
中学生检讨书1000字
2014/10/28 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书