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中使用PIL库实现图片高斯模糊实例
Feb 08 Python
Python操作Excel之xlsx文件
Mar 24 Python
用python实现将数组元素按从小到大的顺序排列方法
Jul 02 Python
如何优雅地改进Django中的模板碎片缓存详解
Jul 04 Python
用pandas中的DataFrame时选取行或列的方法
Jul 11 Python
matplotlib实现区域颜色填充
Mar 18 Python
利用python实现.dcm格式图像转为.jpg格式
Jan 13 Python
pytorch梯度剪裁方式
Feb 04 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
May 24 Python
opencv 图像轮廓的实现示例
Jul 08 Python
Django修改app名称和数据表迁移方案实现
Sep 17 Python
Python 微信公众号文章爬取的示例代码
Nov 30 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
一个捕获函数输出的函数
2007/02/14 PHP
PHP版单点登陆实现方案的实例
2016/11/17 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
2016/11/22 PHP
thinkphp关于简单的权限判定方法
2017/04/03 PHP
PHP调用接口API封装的例子
2019/10/11 PHP
解决Laravel5.2 Auth认证退出失效的问题
2019/10/14 PHP
jquery tools 系列 scrollable(2)
2009/09/06 Javascript
jQuery 1.8 Release版本发布了
2012/08/14 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
jQuery实现div跟随鼠标移动
2020/08/20 jQuery
原生JavaScript实现的简单放大镜效果示例
2018/02/07 Javascript
详解Angular模板引用变量及其作用域
2018/11/23 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
2020/03/16 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
pycharm 使用心得(五)断点调试
2014/06/06 Python
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
使用Python发送邮件附件以定时备份MySQL的教程
2015/04/25 Python
Python实现简单的HttpServer服务器示例
2017/09/25 Python
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
python如何使用jt400.jar包代码实例
2019/12/20 Python
详解Python IO口多路复用
2020/06/17 Python
Python 在函数上添加包装器
2020/07/28 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
2020/10/18 Python
澳大利亚儿童精品仓库:Goo & Co.
2019/06/20 全球购物
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
捷克街头、运动和滑板一站式商店:BoardStar.cz
2019/10/06 全球购物
幼儿园的门卫岗位职责
2014/04/10 职场文书
法制宣传教育方案
2014/05/09 职场文书
村党支部公开承诺书
2014/05/29 职场文书
科学发展观活动总结
2014/08/28 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
HTML中实现音乐或视频自动播放案例详解
2022/05/30 HTML / CSS
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
2022/07/07 Java/Android