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实现命令行有道词典的方法示例
Jan 31 Python
Python信息抽取之乱码解决办法
Jun 29 Python
itchat接口使用示例
Oct 23 Python
python中matplotlib的颜色及线条控制的示例
Mar 16 Python
Python一句代码实现找出所有水仙花数的方法
Nov 13 Python
Python 多个图同时在不同窗口显示的实现方法
Jul 07 Python
mac系统下Redis安装和使用步骤详解
Jul 09 Python
scikit-learn线性回归,多元回归,多项式回归的实现
Aug 29 Python
pytorch::Dataloader中的迭代器和生成器应用详解
Jan 03 Python
解决tensorflow打印tensor有省略号的问题
Feb 04 Python
Python图像处理库PIL的ImageFont模块使用介绍
Feb 26 Python
python能做哪些生活有趣的事情
Sep 09 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
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
在普通HTTP上安全地传输密码
2007/07/21 PHP
PHP实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
php自动获取目录下的模板的代码
2010/08/08 PHP
新手菜鸟必读:session与cookie的区别
2013/08/22 PHP
php curl常用的5个经典例子
2017/01/20 PHP
基于Laravel 多个中间件的执行顺序详解
2019/10/21 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
window.open的功能全解析
2006/10/10 Javascript
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
基于jQuery的可以控制左右滚动及自动滚动效果的代码
2010/07/25 Javascript
Jquery index()方法 获取相应元素索引值
2012/10/12 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
2013/06/06 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
AngularJS模板加载用法详解
2016/11/04 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
2017/03/24 Javascript
vue.js实现刷新当前页面的方法教程
2017/07/05 Javascript
微信小程序如何自定义table组件
2019/06/29 Javascript
vue+iview分页组件的封装
2020/11/17 Vue.js
Python 正则表达式操作指南
2009/05/04 Python
Python深入学习之对象的属性
2014/08/31 Python
跟老齐学Python之??碌某?? target=
2014/09/12 Python
centos6.4下python3.6.1安装教程
2017/07/21 Python
手把手教你python实现SVM算法
2017/12/27 Python
python对excel文档去重及求和的实例
2018/04/18 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
Python小进度条显示代码
2019/03/05 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
2020/06/24 Python
关于django python manage.py startapp 应用名出错异常原因解析
2020/12/15 Python
信息专业学生学习的自我评价
2014/02/17 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
城南旧事电影观后感
2015/06/16 职场文书
爱国主义电影观后感
2015/06/18 职场文书
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android