Python使用filetype精确判断文件类型


Posted in Python onJuly 02, 2017

filetype.py

Small and dependency free Python package to infer file type and MIME type checking the  magic numbers signature of a file or buffer.

This is a Python port from filetype Go package. Works in Python  +3 .

一个小巧自由开放Python开发包,主要用来获得文件类型。包要求Python 3.+

功能特色

•简单友好的API
•支持宽范围文件类型
•提供文件扩展名和MIME类型判断
•文件的MIME类型扩展新增
•通过文件(图像、视频、音频…)简单分析
•可插拔:添加新的自定义类型的匹配
•快,即使处理大文件
•只需要前261个字节表示的最大文件头,这样你就可以通过一个单字节
•依赖自由(只是Python代码,没有C的扩展,没有libmagic绑定)
•跨平台文件识别

安装

pip install filetype

API

详情请查看 annotated API reference .

实例

简单的文件类型识别

import filetype
 
def main():
 kind = filetype.guess('tests/fixtures/sample.jpg')
 if kind is None:
  print('Cannot guess file type!')
  return
 
 print('File extension: %s' % kind.extension)
 print('File MIME type: %s' % kind.mime)
 
if __name__ == '__main__':
 main()

支持类型

图片

• jpg  ?  image/jpeg
• png  ?  image/png
• gif  ?  image/gif
• webp  ?  image/webp
• cr2  ?  image/x-canon-cr2
• tif  ?  image/tiff
• bmp  ?  image/bmp
• jxr  ?  image/vnd.ms-photo
• psd  ?  image/vnd.adobe.photoshop
• ico  ?  image/x-icon

视频

• mp4  ?  video/mp4
• m4v  ?  video/x-m4v
• mkv  ?  video/x-matroska
• webm  ?  video/webm
• mov  ?  video/quicktime
• avi  ?  video/x-msvideo
• wmv  ?  video/x-ms-wmv
• mpg  ?  video/mpeg
• flv  ?  video/x-flv

音频

• mid  ?  audio/midi
• mp3  ?  audio/mpeg
• m4a  ?  audio/m4a
• ogg  ?  audio/ogg
• flac  ?  audio/x-flac
• wav  ?  audio/x-wav
• amr  ?  audio/amr

资料库

• epub  ?  application/epub+zip
• zip  ?  application/zip
• tar  ?  application/x-tar
• rar  ?  application/x-rar-compressed
• gz  ?  application/gzip
• bz2  ?  application/x-bzip2
• 7z  ?  application/x-7z-compressed
• xz  ?  application/x-xz
• pdf  ?  application/pdf
• exe  ?  application/x-msdownload
• swf  ?  application/x-shockwave-flash
• rtf  ?  application/rtf
• eot  ?  application/octet-stream
• ps  ?  application/postscript
• sqlite  ?  application/x-sqlite3
• nes  ?  application/x-nintendo-nes-rom
• crx  ?  application/x-google-chrome-extension
• cab  ?  application/vnd.ms-cab-compressed
• deb  ?  application/x-deb
• ar  ?  application/x-unix-archive
• Z  ?  application/x-compress
• lz  ?  application/x-lzip

字体

• woff  ?  application/font-woff
• woff2  ?  application/font-woff
• ttf  ?  application/font-sfnt
• otf  ?  application/font-sfnt

基准测试

使用链接中的文件进行测试,你可以点击获得到它: real files .

Environment: OSX x64 i7 2.7 Ghz
------------------------------------------------------------------------------------------ benchmark: 7 tests ------------------------------------------------------------------------------------------
Name (time in ns)                       Min                     Max                   Mean                StdDev                 Median                   IQR            Outliers(*)  Rounds  Iterations
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
test_infer_image_from_bytes        357.6279 (1.0)       29,166.5395 (1.0)       1,642.3360 (1.0)        380.9934 (1.0)       1,509.9843 (1.0)        158.9457 (1.0)       9095;13752  102301           6
test_infer_audio_from_bytes        953.6743 (2.67)      96,082.6874 (3.29)     16,534.5880 (10.07)    3,002.1143 (7.88)     15,974.0448 (10.58)      953.6743 (6.00)       4514;6051   41528           1
test_infer_video_from_bytes     13,828.2776 (38.67)    272,989.2731 (9.36)     16,151.3144 (9.83)     3,361.2320 (8.82)     15,020.3705 (9.95)       953.6743 (6.00)       2522;2887   22193           1
test_infer_image_from_disk      15,974.0448 (44.67)    108,957.2906 (3.74)     18,621.0844 (11.34)    3,895.4441 (10.22)    17,166.1377 (11.37)    1,192.0929 (7.50)       1528;1804   10206           1
test_infer_video_from_disk      23,841.8579 (66.67)    229,120.2545 (7.86)     28,691.3476 (17.47)    6,242.9901 (16.39)    25,987.6251 (17.21)    4,053.1158 (25.50)      1987;1247   15651           1
test_infer_zip_from_disk        26,941.2994 (75.33)    230,073.9288 (7.89)     32,123.3861 (19.56)    7,524.4988 (19.75)    29,087.0667 (19.26)    4,768.3716 (30.00)      1349;1292   16132           1
test_infer_tar_from_disk        33,855.4382 (94.67)    164,031.9824 (5.62)     36,884.4401 (22.46)    4,489.4443 (11.78)    36,001.2054 (23.84)      953.6743 (6.00)       1036;1828   14666           1
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Python 相关文章推荐
python抓取网页内容示例分享
Feb 24 Python
python进阶教程之循环相关函数range、enumerate、zip
Aug 30 Python
python 迭代器和iter()函数详解及实例
Mar 21 Python
Python实现网站注册验证码生成类
Jun 08 Python
python之pandas用法大全
Mar 13 Python
python 实现对文件夹中的图像连续重命名方法
Oct 25 Python
使用python 打开文件并做匹配处理的实例
Jan 02 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
May 29 Python
python定间隔取点(np.linspace)的实现
Nov 27 Python
python如何获取apk的packagename和activity
Jan 10 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
Jun 01 Python
Python字典和列表性能之间的比较
Jun 07 Python
使用python实现tcp自动重连
Jul 02 #Python
详解python3中socket套接字的编码问题解决
Jul 01 #Python
详解Python中for循环是如何工作的
Jun 30 #Python
python 连接sqlite及简单操作
Jun 30 #Python
利用Python破解斗地主残局详解
Jun 30 #Python
Python实现的文本编辑器功能示例
Jun 30 #Python
Python构建XML树结构的方法示例
Jun 30 #Python
You might like
PHP register_shutdown_function函数的深入解析
2013/06/03 PHP
PHP中对于浮点型的数据需要用不同的方法解决
2014/03/11 PHP
javascript获取当前ip的代码
2009/05/10 Javascript
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
Javascript 面向对象(二)封装代码
2012/05/23 Javascript
详细介绍8款超实用JavaScript框架
2013/10/25 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
2014/12/05 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
2016/08/17 Javascript
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
2016/11/29 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
2018/02/26 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
node.js调用C++函数的方法示例
2018/09/21 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
vue prop属性传值与传引用示例
2019/11/13 Javascript
python实现爬虫下载美女图片
2015/07/14 Python
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
python进行文件对比的方法
2018/12/24 Python
python pandas生成时间列表
2019/06/29 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
2019/07/05 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
html5弹跳球示例代码
2013/07/23 HTML / CSS
凯普林包包西班牙官网:Kipling西班牙
2019/04/12 全球购物
会计电算化专业个人的自我评价
2013/11/24 职场文书
工作表现评语
2014/01/19 职场文书
装修设计师求职信
2014/02/26 职场文书
同志主要表现材料
2014/08/21 职场文书
2014年人民警察入党思想汇报
2014/10/12 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
政审证明材料
2015/06/19 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL
防止web项目中的SQL注入
2021/12/06 MySQL
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python