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多线程下的变量问题
Apr 28 Python
python实现爬虫下载美女图片
Jul 14 Python
Python中使用asyncio 封装文件读写
Sep 11 Python
使用Python生成XML的方法实例
Mar 21 Python
详解python之配置日志的几种方式
May 22 Python
新手常见6种的python报错及解决方法
Mar 09 Python
django框架使用orm实现批量更新数据的方法
Jun 21 Python
tensorflow 报错unitialized value的解决方法
Feb 06 Python
Python基于DB-API操作MySQL数据库过程解析
Apr 23 Python
python 实现音频叠加的示例
Oct 29 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
Nov 11 Python
jupyter 添加不同内核的操作
Feb 06 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
骨王战斗力在公会成员中排不进前五,却当选了会长,原因竟是这样
2020/03/02 日漫
火影忍者:三大瞳力之一的白眼,为什么没有写轮眼那么出色?
2020/03/02 日漫
防止MySQL注入或HTML表单滥用的PHP程序
2009/01/21 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
Javascript 遍历对象中的子对象
2009/07/03 Javascript
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
zeroclipboard复制到剪切板的flash
2010/08/04 Javascript
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
jQueryUI写一个调整分类的拖放效果实现代码
2012/05/10 Javascript
不使用ajax实现无刷新提交表单
2014/12/21 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
2016/05/09 Javascript
jstl中判断list中是否包含某个值的简单方法
2016/10/14 Javascript
node.js中grunt和gulp的区别详解
2017/07/17 Javascript
基于 Bootstrap Datetimepicker 联动
2017/08/03 Javascript
JS实现身份证输入框的输入效果
2017/08/21 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
vue权限问题的完美解决方案
2019/05/08 Javascript
vue实现搜索过滤效果
2019/05/28 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
JavaScript函数Call、Apply原理实例解析
2020/02/17 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
微信小程序实现购物车功能
2020/11/18 Javascript
vue自定义组件实现双向绑定
2021/01/13 Vue.js
[10:24]郎朗助力完美“圣”典,天籁交织奏响序曲
2016/12/18 DOTA
详解Python的Django框架中的中间件
2015/07/24 Python
python查询mysql,返回json的实例
2018/03/26 Python
python中plot实现即时数据动态显示方法
2018/06/22 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
YSL Beauty加拿大官方商城:圣罗兰美妆加拿大
2017/05/15 全球购物
门卫班长岗位职责
2013/12/15 职场文书
大学生暑期实践感言
2014/02/26 职场文书
捐书活动总结
2014/05/04 职场文书
中专生自荐信
2014/06/25 职场文书
小学毕业典礼演讲稿
2014/09/09 职场文书
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
2022/02/12 Servers