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实现从订阅源下载图片的方法
Mar 11 Python
python使用xlrd模块读写Excel文件的方法
May 06 Python
利用Python自动监控网站并发送邮件告警的方法
Aug 24 Python
Python自动化运维和部署项目工具Fabric使用实例
Sep 18 Python
Python在不同目录下导入模块的实现方法
Oct 27 Python
python获取指定字符串中重复模式最高的字符串方法
Jun 29 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
Aug 08 Python
详解Python3迁移接口变化采坑记
Oct 11 Python
pyenv虚拟环境管理python多版本和软件库的方法
Dec 26 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
Apr 25 Python
基于TensorFlow的CNN实现Mnist手写数字识别
Jun 17 Python
详解Python中的for循环
Apr 30 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
多重?l件?合查?(一)
2006/10/09 PHP
PHP中session变量的销毁
2014/02/27 PHP
php英文单词统计器
2016/06/23 PHP
PHP编程中的Session阻塞问题与解决方法分析
2017/08/07 PHP
PHP检测接口Traversable用法详解
2017/12/29 PHP
添加到收藏夹代码(兼容几乎所有的浏览器)
2007/01/09 Javascript
prototype Element学习笔记(篇一)
2008/10/26 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
Json和Jsonp理论实例代码详解
2013/11/15 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
easyui messager alert 三秒后自动关闭提示的实例
2016/11/07 Javascript
Websocket协议详解及简单实例代码
2016/12/12 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
Angular 4依赖注入学习教程之ClassProvider的使用(三)
2017/06/04 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
解决Vue不能检测数组或对象变动的问题
2018/02/24 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
vue中移动端调取本地的复制的文本方式
2020/07/18 Javascript
在Python的Flask框架中构建Web表单的教程
2016/06/04 Python
Python爬虫利用cookie实现模拟登陆实例详解
2017/01/12 Python
Collatz 序列、逗号代码、字符图网格实例
2017/06/22 Python
Python科学画图代码分享
2017/11/29 Python
简单了解Python生成器是什么
2019/07/02 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
Pytorch实现基于CharRNN的文本分类与生成示例
2020/01/08 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
Jo Malone美国官网:祖玛珑香水
2017/03/27 全球购物
中文专业毕业生自荐信
2014/05/24 职场文书
2014年廉洁自律承诺书
2014/05/26 职场文书
求职简历自我评价2015
2015/03/10 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
Go 语言下基于Redis分布式锁的实现方式
2021/06/28 Golang
MySQL的全局锁和表级锁的具体使用
2021/08/23 MySQL