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批量修改文件后缀的方法
Jan 26 Python
python避免死锁方法实例分析
Jun 04 Python
Python3学习urllib的使用方法示例
Nov 29 Python
python读取与写入csv格式文件的示例代码
Dec 16 Python
基于Python实现的ID3决策树功能示例
Jan 02 Python
使用python 爬虫抓站的一些技巧总结
Jan 10 Python
Python基于matplotlib实现绘制三维图形功能示例
Jan 18 Python
Python面向对象程序设计多继承和多态用法示例
Apr 08 Python
Python学习笔记之Zip和Enumerate用法实例分析
Aug 14 Python
python实现在多维数组中挑选符合条件的全部元素
Nov 26 Python
Python使用turtle库绘制小猪佩奇(实例代码)
Jan 16 Python
Python中常用的高阶函数实例详解
Feb 21 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数据结构与算法(PHP描述) 查找与二分法查找
2012/06/21 PHP
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
php实现Mongodb自定义方式生成自增ID的方法
2015/03/23 PHP
php array 转json及java 转换 json数据格式操作示例
2019/11/13 PHP
jQuery 获取浏览器所在的IP地址的小例子
2013/11/08 Javascript
js propertychange和oninput事件
2014/09/28 Javascript
详解JavaScript的流程控制语句
2015/11/30 Javascript
前端js文件合并的三种方式推荐
2016/05/19 Javascript
nodejs个人博客开发第二步 入口文件
2017/04/12 NodeJs
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
在React 组件中使用Echarts的示例代码
2017/11/08 Javascript
jQuery niceScroll滚动条错位问题的解决方法
2018/02/03 jQuery
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
2018/08/31 Javascript
修改vue+webpack run build的路径方法
2018/09/01 Javascript
简单说说如何使用vue-router插件的方法
2019/04/08 Javascript
js实现web调用摄像头 js截取视频画面
2019/04/21 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
Vue数据双向绑定原理实例解析
2020/05/15 Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
2020/06/25 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
[00:31]DOTA2荣耀之路7:Miracle-空血无敌斩
2018/05/31 DOTA
python函数的5种参数详解
2017/02/24 Python
Python基础练习之用户登录实现代码分享
2017/11/08 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
2019/06/03 Python
django 类视图的使用方法详解
2019/07/24 Python
Python找出列表中出现次数最多的元素三种方式
2020/02/24 Python
Keras自定义IOU方式
2020/06/10 Python
微信html5页面调用第三方位置导航的示例
2018/03/14 HTML / CSS
澳大利亚办公室装修:JasonL Office Furniture
2019/06/25 全球购物
高中生自我鉴定范文
2013/10/30 职场文书
GMP办公室主任岗位职责
2014/03/14 职场文书
个人公开承诺书
2014/03/28 职场文书
预防艾滋病宣传活动总结
2015/05/09 职场文书
Linux安装Nginx步骤详解
2021/03/31 Servers