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 相关文章推荐
把项目从Python2.x移植到Python3.x的经验总结
Apr 20 Python
python实现的简单抽奖系统实例
May 22 Python
简单解析Django框架中的表单验证
Jul 17 Python
python黑魔法之编码转换
Jan 25 Python
浅谈python为什么不需要三目运算符和switch
Jun 17 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
Jul 04 Python
python爬虫之urllib3的使用示例
Jul 09 Python
详解Python循环作用域与闭包
Mar 21 Python
解决Django layui {{}}冲突的问题
Aug 29 Python
浅析python,PyCharm,Anaconda三者之间的关系
Nov 27 Python
python如何绘制疫情图
Sep 16 Python
python实现图片转字符画
Feb 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制作新闻系统的思路
2006/10/09 PHP
在PHP中设置、使用、删除Cookie的解决方法
2013/05/06 PHP
如何正确配置Nginx + PHP
2016/07/15 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
js replace替换所有匹配的字符串
2014/02/13 Javascript
学习JavaScript设计模式(继承)
2015/11/26 Javascript
jQuery中的ready函数与window.onload谁先执行
2016/06/21 Javascript
BootStrap table表格插件自适应固定表头(超好用)
2016/08/24 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
jQuery图片加载显示loading效果
2016/11/04 Javascript
javascript中的后退和刷新实现方法
2016/11/10 Javascript
写给vue新手们的vue渲染页面教程
2017/09/01 Javascript
最实用的JS数组函数整理
2017/12/05 Javascript
微信小程序 scroll-view实现锚点滑动的示例
2017/12/06 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
自己动手封装一个React Native多级联动
2018/09/19 Javascript
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
python计算一个序列的平均值的方法
2015/07/11 Python
Windows下安装python2和python3多版本教程
2017/03/30 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
Python下使用Scrapy爬取网页内容的实例
2018/05/21 Python
解决python 无法加载downsample模型的问题
2018/10/25 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
2020/02/07 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
解决python调用自己文件函数/执行函数找不到包问题
2020/06/01 Python
安德玛加拿大官网:Under Armour加拿大
2019/10/02 全球购物
挂科检讨书范文
2014/02/20 职场文书
反邪教学习心得体会
2016/01/15 职场文书
mysql 直接拷贝data 目录下文件还原数据的实现
2021/07/25 MySQL
默认网关不可用修复后过一会又不好使了解决方法
2022/04/08 数码科技