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自动调用IE打开某个网站的方法
Jun 03 Python
详细解读Python中解析XML数据的方法
Oct 15 Python
Python常见异常分类与处理方法
Jun 04 Python
python 读文件,然后转化为矩阵的实例
Apr 23 Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 Python
python tkinter GUI绘制,以及点击更新显示图片代码
Mar 14 Python
python实现斗地主分牌洗牌
Jun 22 Python
如何在Python3中使用telnetlib模块连接网络设备
Sep 21 Python
python利用pandas分析学生期末成绩实例代码
Jul 09 Python
python中的3种定义类方法
Nov 27 Python
Python使用PyYAML库读写yaml文件的方法
Apr 06 Python
python微信智能AI机器人实现多种支付方式
Apr 12 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
把77A收信机改造成收音机
2021/03/02 无线电
php 格式化数字的时候注意数字的范围
2010/04/13 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
2013/11/12 PHP
PHP读取XML格式文件的方法总结
2017/02/27 PHP
PHP实现的数独求解问题示例
2017/04/18 PHP
MooTools 1.2介绍
2009/09/14 Javascript
转换json格式的日期为Javascript对象的函数
2010/07/13 Javascript
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
javascript实用方法总结
2015/02/06 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
vue.js入门教程之计算属性
2016/09/01 Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
2016/12/08 Javascript
AngularJS控制器controller给模型数据赋初始值的方法
2017/01/04 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
详解node.js中的npm和webpack配置方法
2018/01/21 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
微信小程序webview实现长按点击识别二维码功能示例
2019/01/24 Javascript
详解如何理解vue的key属性
2019/04/14 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
实现vuex原理的示例
2020/10/21 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
[02:38]DOTA2英雄基础教程 噬魂鬼
2014/01/03 DOTA
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
基于python中pygame模块的Linux下安装过程(详解)
2017/11/09 Python
浅谈python数据类型及类型转换
2017/12/18 Python
Django 响应数据response的返回源码详解
2019/08/06 Python
pyecharts动态轨迹图的实现示例
2020/04/17 Python
Python如何实现机器人聊天
2020/09/10 Python
Hotels.com南非:酒店预订
2017/11/02 全球购物
法国在线药房:1001Pharmacies
2021/03/07 全球购物
商务英语专业自荐信
2013/10/14 职场文书
经典优秀毕业生求职信范文分享
2013/12/18 职场文书
党校培训自我鉴定
2014/02/01 职场文书
社会公德演讲稿
2014/05/20 职场文书
十一国庆节“向国旗敬礼”主题班会活动方案
2014/09/27 职场文书
回复函范文
2015/07/14 职场文书