Python使用filetype精确判断文件类型

判断文件类型在开发中非常常见的需求,怎样才能准确的判断文件类型呢?首先大家想到的是文件的后缀,但是非常遗憾的是这种方法是非常不靠谱的,因为文件的后缀是可以随意更改的,而python中有个小插件可以实现,下面我们就来详细探讨下

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 .

实例

简单的文件类型识别

importfiletype
  
defmain():
 kind=filetype.guess('tests/fixtures/sample.jpg')
 ifkindisNone:
  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 
–   

• 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使用filetype精确判断文件类型的更多相关文章

  1. Python使用filetype精确判断文件类型 (文件类型获取)

    filetype.py Small and dependency free Python package to infer file type and MIME type checking the m ...

  2. Python之基于十六进制判断文件类型

    核心代码: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : suk import struct from io import Byt ...

  3. 【转】python通过文件头判断文件类型

    刚刚看到一个好玩的程序,拉过来.原文地址:https://www.ttlsa.com/python/determine-file-type-by-the-file-header/ 侵权删. ===== ...

  4. python准确判断文件类型

    判断文件类型在开发中非常常见的需求,怎样才能准确的判断文件类型呢?首先大家想到的是文件的后缀,但是非常遗憾的是这种方法是非常不靠谱的,因为文件的后缀是可以随意更改的,而大家都知道后缀在linux系统下 ...

  5. 利用PHP取二进制文件头判断文件类型

    <?php $files = array('D:\no.jpg', 'D:\no.png','D:\no2.JPEG','D:\no.BMP'); $fileTypes = array( 779 ...

  6. php 读取文件头判断文件类型的实现代码

    php代码实现读取文件头判断文件类型,支持图片.rar.exe等后缀. 例子: <?php $filename = "11.jpg"; //为图片的路径可以用d:/uploa ...

  7. 用java流方式判断文件类型

    这个方法只能在有限的范围内有效.并不是万金油 比如 图片类型判断,音频文件格式判断,视频文件格式判断等这种肯定是2进制且专业性很强的文件类型判断. 下面给出完整版代码 首先是文件类型枚取 packag ...

  8. UNIX环境编程学习笔记(6)——文件I/O之判断文件类型

    lienhua342014-09-01 1 文件类型 我们平时最常接触的文件类型有普通文件(regular file)和目录(di-rectory file),但是 UNIX 系统提供了多种文件类型: ...

  9. java文件上传,自动判断文件类型

    public enum FileType { /** * JEPG. */ JPEG("FFD8FF"), /** * PNG. */ PNG("89504E47&quo ...

随机推荐

  1. springboot集成Spring Session

    10.1 分布式集群环境下的集成(同域名.同项目) 10.1.1        创建SpringBoot的web支持项目07-springboot-session 创建项目 10.1.2        ...

  2. Summer training #8

    A: B:按题意直接暴力找符合题意的数的个数 #include <bits/stdc++.h> #include <cstring> #include <iostream ...

  3. java HttpClientUtil帮助类

    自己写的java模拟请求帮助类,已经包含header头构造,会话session维持 package com.haozl.back.util; import java.io.File; import j ...

  4. MyBatis---join 查询

    在实际业务中,经常能碰到多表关联查询 下面的Demo,讲举例join查询在MyBatis中的实现 User 类: package com.zy.domain; import java.io.Seria ...

  5. Java-JDBCUtil工具类

    import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  6. poj 3050 Hopscotch DFS+暴力搜索+set容器

    Hopscotch Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2774 Accepted: 1940 Description ...

  7. Reborn & Recover

    高考总算是结束了 而我们的旅程却还在继续 现在姑且是个ACMer(暂定) 而我已经将近一年没写代码了 接下来是全新的开始 全新的学校 全新的未来 总之从现在开始 试着努力看看吧!

  8. Ubuntu下的redis安装过程

    Redis make test Errors? - Stack Overflow  https://stackoverflow.com/questions/48425998/redis-make-te ...

  9. 笔记本在安装Windows+Linux双系统后,进入Windows时花屏的解决办法

    问题:在笔记本安装双系统(Windows7+Ubuntu14.04)[先安装Windows,后安装Ubuntu]后,进入Windows时出现了花屏. 问题原因:笔记本只有集显,在系统启动时会先加载Ub ...

  10. Multi-judge Solving

    C. Multi-judge Solving 写这个题的时候也是思维出了漏洞....容易漏掉的一点就是在别的 oj 上做了题之后可能不能够马上回原来的 oj 上做题,这是写循环的时候需要注意的的方,需 ...