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 字典dict使用介绍
Nov 30 Python
理解Python中的类与实例
Apr 27 Python
python实现备份目录的方法
Aug 03 Python
python实现各进制转换的总结大全
Jun 18 Python
Python callable()函数用法实例分析
Mar 17 Python
详解Appium+Python之生成html测试报告
Jan 04 Python
python 机器学习之支持向量机非线性回归SVR模型
Jun 26 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
Aug 23 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
Jan 02 Python
python实现简单的购物程序代码实例
Mar 03 Python
python实现控制台输出彩色字体
Apr 05 Python
python控制台打印log输出重复的解决方法
May 14 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
杏林同学录(二)
2006/10/09 PHP
php下使用iconv需要注意的问题
2010/11/20 PHP
php 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
php修改指定文件后缀的方法
2014/09/11 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
FileUpload 控件 禁止手动输入或粘贴的实现代码
2010/04/07 Javascript
jQuery Lightbox 图片展示插件使用说明
2010/04/25 Javascript
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
vue.js的computed,filter,get,set的用法及区别详解
2018/03/08 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
laravel实现中文和英语互相切换的例子
2019/09/30 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
vue实现单一筛选、删除筛选条件
2020/10/26 Javascript
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
[45:15]Optic vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Python中的魔法方法深入理解
2014/07/09 Python
Python中atexit模块的基本使用示例
2015/07/08 Python
python监控linux内存并写入mongodb(推荐)
2017/09/11 Python
深入理解Python3 内置函数大全
2017/11/23 Python
python实现微信发送邮件关闭电脑功能
2018/02/22 Python
Python中将dataframe转换为字典的实例
2018/04/13 Python
Python实现制度转换(货币,温度,长度)
2019/07/14 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
2020/04/08 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
德国最大的网上足球商店:11teamsports
2019/09/11 全球购物
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
高中毕业自我鉴定
2013/12/19 职场文书
2015年班长个人工作总结
2015/04/03 职场文书
实习指导老师意见
2015/06/04 职场文书
2016年“12.3”国际残疾人日活动总结
2016/04/01 职场文书
nginx安装以及配置的详细过程记录
2021/09/15 Servers
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL
10大幻兽系恶魔果实 蝙蝠果实上榜,第一自愈能力强
2022/03/18 日漫