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 相关文章推荐
安装dbus-python的简要教程
May 05 Python
浅谈Python peewee 使用经验
Oct 20 Python
查看django版本的方法分享
May 14 Python
Tensorflow实现卷积神经网络的详细代码
May 24 Python
python递归实现快速排序
Aug 18 Python
Python单向链表和双向链表原理与用法实例详解
Aug 31 Python
使用TensorFlow实现SVM
Sep 06 Python
使用python socket分发大文件的实现方法
Jul 08 Python
flask应用部署到服务器的方法
Jul 12 Python
python基于TCP实现的文件下载器功能案例
Dec 10 Python
将python依赖包打包成window下可执行文件bat方式
Dec 26 Python
Python实现的扫码工具居然这么好用!
Jun 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
当年上海收录机产品生产,进口和价格情况
2021/03/04 无线电
php setcookie(name, value, expires, path, domain, secure) 参数详解
2013/06/28 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
2014/05/05 PHP
yii2.0整合阿里云oss上传单个文件的示例
2017/09/19 PHP
关于juqery radio写法的兼容性问题(新老版本jquery)
2010/06/14 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
分享JavaScript获取网页关闭与取消关闭的事件
2013/12/13 Javascript
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
js实现浏览本地文件并显示扩展名的方法
2015/08/17 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
JavaScript导航脚本判断当前导航
2016/07/12 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
2019/01/28 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
JS计算两个数组的交集、差集、并集、补集(多种实现方式)
2019/05/21 Javascript
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
关于Vue中$refs的探索浅析
2020/11/05 Javascript
python开发之文件操作用法实例
2015/11/13 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
Python网络爬虫神器PyQuery的基本使用教程
2018/02/03 Python
Django使用AJAX调用自己写的API接口的方法
2019/03/06 Python
ORM Django 终端打印 SQL 语句实现解析
2019/08/09 Python
布隆过滤器的概述及Python实现方法
2019/12/08 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
Python系统公网私网流量监控实现流程
2020/11/23 Python
python 多线程爬取壁纸网站的示例
2021/02/20 Python
纯CSS3实现的阴影效果
2014/12/24 HTML / CSS
Vertbaudet西班牙网上商店:婴儿服装、童装、母婴用品和儿童家具
2019/10/16 全球购物
Java中的异常处理机制的简单原理和应用
2013/04/27 面试题
三年级学生评语
2014/04/23 职场文书
李培根演讲稿
2014/05/22 职场文书
群众路线个人自我剖析材料
2014/10/07 职场文书
春秋淹城导游词
2015/02/11 职场文书
2015年学生管理工作总结
2015/05/26 职场文书
活动新闻稿范文
2015/07/17 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
Java如何实现树的同构?
2021/06/22 Java/Android