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中不同进制的语法及转换方法分析
Jul 27 Python
python获取指定时间差的时间实例详解
Apr 11 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
python实现简易内存监控
Jun 21 Python
Django开发中的日志输出的方法
Jul 02 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
Mar 05 Python
Python中函数的返回值示例浅析
Aug 28 Python
TensorFLow 数学运算的示例代码
Apr 21 Python
利用Python的folium包绘制城市道路图的实现示例
Aug 24 Python
python 基于PYMYSQL使用MYSQL数据库
Dec 24 Python
PyQt5结合QtDesigner实现文本框读写操作
Jun 11 Python
Django + Taro 前后端分离项目实现企业微信登录功能
Apr 07 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
配置支持SSI
2006/11/25 PHP
php实现与erlang的二进制通讯实例解析
2014/07/23 PHP
PHP生成不重复随机数的方法汇总
2014/11/19 PHP
推荐几个开源的微信开发项目
2014/12/28 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
PHP概率计算函数汇总
2015/09/13 PHP
laravel学习教程之关联模型
2016/07/30 PHP
实例介绍PHP中zip_open()函数用法
2019/02/15 PHP
用javascript获取textarea中的光标位置
2008/05/06 Javascript
让firefox支持IE的一些方法的javascript扩展函数代码
2010/01/02 Javascript
jQuery asp.net 用json格式返回自定义对象
2010/04/07 Javascript
jQuery1.6 使用方法一
2011/11/23 Javascript
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
2014/09/26 NodeJs
用JavaScript实现页面重定向功能的教程
2015/06/04 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
Canvas 绘制粒子动画背景
2017/02/15 Javascript
如何编写一个完整的Angular4 FormText 组件
2017/11/18 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
Angular6 正则表达式允许输入部分中文字符
2018/09/10 Javascript
vue项目上传Github预览的实现示例
2018/11/06 Javascript
jQuery实现的导航条点击后高亮显示功能示例
2019/03/04 jQuery
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
python文件操作之目录遍历实例分析
2015/05/20 Python
Python中datetime常用时间处理方法
2015/06/15 Python
简单了解OpenCV是个什么东西
2017/11/10 Python
Python语言描述最大连续子序列和
2017/12/05 Python
python 按不同维度求和,最值,均值的实例
2018/06/28 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
django 捕获异常和日志系统过程详解
2019/07/18 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
python实现马丁策略回测3000只股票的实例代码
2021/01/22 Python
自荐信怎么写呢?
2013/12/09 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
资料员岗位职责
2015/02/10 职场文书
城管个人总结
2015/02/28 职场文书
JavaScript的function函数详细介绍
2021/11/20 Javascript