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使用urllib2实现发送带cookie的请求
Apr 28 Python
从局部变量和全局变量开始全面解析Python中变量的作用域
Jun 16 Python
Python线程指南详细介绍
Jan 05 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
Jul 01 Python
Django框架模型简单介绍与使用分析
Jul 18 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
Apr 02 Python
自学python用什么系统好
Jun 23 Python
详解Anaconda安装tensorflow报错问题解决方法
Nov 01 Python
python制作微博图片爬取工具
Jan 16 Python
golang中的空接口使用详解
Mar 30 Python
关于Python中*args和**kwargs的深入理解
Aug 07 Python
python 闭包函数详细介绍
Apr 19 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/07/05 PHP
php中session与cookie的比较
2015/01/27 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
Jquery Autocomplete 结合asp.net使用要点
2010/10/29 Javascript
js实现在页面上弹出蒙板技巧简单实用
2013/04/16 Javascript
js实现简单的星级选择器提交效果适用于评论等
2013/10/18 Javascript
关于js内存泄露的一个好例子
2013/12/09 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
jQuery给动态添加的元素绑定事件的方法
2015/03/09 Javascript
angular基于ng-alain定义自己的select组件示例
2018/02/23 Javascript
Vue+mui实现图片的本地缓存示例代码
2018/05/24 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
vue.js+element-ui动态配置菜单的实例
2018/09/07 Javascript
Vue Router history模式的配置方法及其原理
2019/05/30 Javascript
从零搭一个自用的前端脚手架的方法步骤
2019/09/23 Javascript
微信js-sdk 录音功能的示例代码
2019/11/01 Javascript
Angular8引入百度Echarts进行图表分析的实现代码
2019/11/27 Javascript
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python入门_学会创建并调用函数的方法
2017/05/16 Python
pandas把dataframe转成Series,改变列中值的类型方法
2018/04/10 Python
Linux下远程连接Jupyter+pyspark部署教程
2019/06/21 Python
详解python中eval函数的作用
2019/10/22 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
python 利用toapi库自动生成api
2020/10/19 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
2020/11/28 Python
Python实现粒子群算法的示例
2021/02/14 Python
美国廉价机票预订网站:Cheapfaremart
2018/04/28 全球购物
前台文员岗位职责
2013/12/28 职场文书
庆祝教师节活动方案
2014/01/31 职场文书
GMP办公室主任岗位职责
2014/03/14 职场文书
2014年民主评议党员工作总结
2014/12/02 职场文书
cf战队宣传语
2015/07/13 职场文书
2016年清明节红领巾广播稿
2015/12/17 职场文书
python b站视频下载的五种版本
2021/05/27 Python
CSS3实现列表无限滚动/轮播效果
2021/06/23 HTML / CSS
仅仅使用 HTML/CSS 实现各类进度条的方式汇总
2021/11/11 HTML / CSS