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中的多线程实例教程
Aug 27 Python
python通过正则查找微博@(at)用户的方法
Mar 13 Python
python使用xmlrpclib模块实现对百度google的ping功能
Jun 02 Python
Python MD5加密实例详解
Aug 02 Python
python中使用正则表达式的连接符示例代码
Oct 10 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
Jun 11 Python
flask中过滤器的使用详解
Aug 01 Python
解决python中画图时x,y轴名称出现中文乱码的问题
Jan 29 Python
Django文件上传与下载(FileFlid)
Oct 06 Python
Python for循环及基础用法详解
Nov 08 Python
解决keras模型保存h5文件提示无此目录问题
Jul 01 Python
python3爬虫GIL修改多线程实例讲解
Nov 24 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
基于mysql的论坛(3)
2006/10/09 PHP
php empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
常见PHP数据库解决方案分析介绍
2015/09/24 PHP
PHP数据的提交与过滤基本操作实例详解
2016/11/11 PHP
php字符集转换
2017/01/23 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
2017/05/05 PHP
Laravel网站打开速度优化的方法汇总
2017/07/16 PHP
List Installed Hot Fixes
2007/06/12 Javascript
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
JS分割字符串并放入数组的函数
2011/07/04 Javascript
AngularJS HTML编译器介绍
2014/12/06 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
详解vue-cli3使用
2018/08/14 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
详解JavaScript修改注册表的方法
2020/01/05 Javascript
Python入门之modf()方法的使用
2015/05/15 Python
Python 常用string函数详解
2016/05/30 Python
python dict.get()和dict['key']的区别详解
2016/06/30 Python
python 判断矩阵中每行非零个数的方法
2019/01/26 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
python如何查看网页代码
2020/06/07 Python
Python获取excel内容及相关操作代码实例
2020/08/10 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
杭州SQL浙江浙大网新恩普软件有限公司
2013/07/27 面试题
素质拓展感言
2014/01/29 职场文书
数学系个人求职信范文
2014/01/30 职场文书
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
元旦晚会主持词
2014/03/24 职场文书
市级优秀班主任事迹材料
2014/05/13 职场文书
商铺门前三包责任书
2014/07/25 职场文书
2016年学习贯彻十八届五中全会精神心得体会
2016/01/05 职场文书
2016廉政教育学习心得体会
2016/01/25 职场文书
MySQL中order by的执行过程
2022/06/05 MySQL