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中zip和unzip数据的方法
May 27 Python
Python实现重建二叉树的三种方法详解
Jun 23 Python
对python自动生成接口测试的示例讲解
Nov 30 Python
详解python校验SQL脚本命名规则
Mar 22 Python
如何用Python制作微信好友个性签名词云图
Jun 28 Python
python读取csv文件指定行的2种方法详解
Feb 13 Python
在Keras中利用np.random.shuffle()打乱数据集实例
Jun 15 Python
python如何进入交互模式
Jul 06 Python
python将数据插入数据库的代码分享
Aug 16 Python
python爬取代理IP并进行有效的IP测试实现
Oct 09 Python
变长双向rnn的正确使用姿势教学
May 31 Python
python使用PySimpleGUI设置进度条及控件使用
Jun 10 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
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
php gd等比例缩放压缩图片函数
2016/06/12 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
PHP常用header头定义代码示例汇总
2020/08/29 PHP
两种WEB下的模态对话框 (asp.net或js的分别实现)
2009/12/02 Javascript
JavaScript 判断指定字符串是否为有效数字
2010/05/11 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
setTimeout()递归调用不加引号出错的解决方法
2014/09/05 Javascript
Javascript基础教程之if条件语句
2015/01/18 Javascript
javascript 缓冲运动框架的实现
2017/09/29 Javascript
ajax前台后台跨域请求处理方式
2018/02/08 Javascript
js数组去重的N种方法(小结)
2018/06/07 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
ant-design-vue中tree增删改的操作方法
2020/11/03 Javascript
用Python的Django框架编写从Google Adsense中获得报表的应用
2015/04/17 Python
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
Selenium鼠标与键盘事件常用操作方法示例
2018/08/13 Python
深入了解Python枚举类型的相关知识
2019/07/09 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
canvas实现扭蛋机动画效果的示例代码
2018/10/17 HTML / CSS
h5使用canvas画布实现手势解锁
2019/01/04 HTML / CSS
Snapfish英国:在线照片打印和个性化照片礼品
2017/01/13 全球购物
电影T恤、80年代T恤和80年代服装:TV Store Online
2020/01/05 全球购物
能否解释一下XSS cookie盗窃是什么意思
2012/06/02 面试题
行政助理岗位职责
2013/11/10 职场文书
九年级化学教学反思
2014/01/28 职场文书
消防器材管理制度
2014/01/28 职场文书
超市店庆活动方案
2014/08/31 职场文书
学校世界艾滋病日宣传活动总结
2015/05/05 职场文书
2015年第31个教师节致辞
2015/07/31 职场文书
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android
一文教你快速生成MySQL数据库关系图
2022/06/28 Redis
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android