一、MIME Type是什么?

资源的媒体类型

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序打开的方式类型,当该扩展名文件被访问时,浏览器会自动使用指定的应用程序打开。

二、mimetypes库---猜测文件类型

该mimetypes模块在文件名或/URL 与文件扩展名关联的 MIME 类型之间进行转换。提供从文件名到 MIME 类型以及从 MIME 类型到文件扩展名的转换;后一种转换不支持编码。

语法:

mimetypes.guess_type(url, strict=True)

根据由url给出的文件名或URL猜测文件的类型。返回值是一个元组(type, encoding),如果类型不能被猜测(丢失或未知的后缀)或表单的字符串(可用于MIME 内容类型头),则类型为元组None'type/subtype'

import mimetypesprint(mimetypes.guess_type(r"C:\Users\zq\Desktop\rarlinux-x64-6.0.2.tar.gz"))  # ('application/x-tar', 'gzip')
print(mimetypes.guess_type(r"C:\Users\zq\Desktop\tar.zip")) # ('application/zip', None) 不准

tar.zip文件是直接将tar.tar改名的,故mimetypes计算的文件类型不准确。

三、filetype库精准判断文件类型

一个小巧自由开放Python开发包,主要用来获得文件类型。

功能特色:

  • 简单友好的API

  • 支持宽范围文件类型

  • 提供文件扩展名和MIME类型判断

  • 文件的MIME类型扩展新增

  • 通过文件(图像、视频、音频…)简单分析

  • 可插拔:添加新的自定义类型的匹配

  • 快,即使处理大文件

  • 只需要前261个字节表示的最大文件头,这样你就可以通过一个单字节

  • 依赖自由(只是Python代码,没有C的扩展,没有libmagic绑定)

  • 跨平台文件识别

import filetypedef get_type(file_path):kind = filetype.guess(file_path)if kind is None:print('Cannot guess file type!')returnprint('File extension: %s' % kind.extension)print('File MIME type: %s' % kind.mime)get_type(r"C:\Users\zhangqiang\Desktop\rarlinux-x64-6.0.2.tar.gz")
get_type(r"C:\Users\zhangqiang\Desktop\tar.zip")'''结果
File extension: gz
File MIME type: application/gzipCannot guess file type!
'''

四、python-magic库计算文件类型: 更准确

python-magic 是 libmagic 文件类型识别库的 Python 接口。 libmagic 通过根据预定义的文件类型列表检查文件头来识别文件类型。 此功能由 Unix 命令文件提供给命令行。
import magic# tar.tar文件改名为tar.zip
print(magic.from_file("/home/podding/task_scheduler/tar.zip"))             # tar archive
print(magic.from_file("/home/podding/task_scheduler/tar.zip", mime=True))  # application/x-tar     print(magic.from_file("/home/cpu_architecture_cwe_checker_x86_executable"))             # ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.4.0, with debug_info, not stripped
print(magic.from_file("/home/cpu_architecture_cwe_checker_x86_executable", mime=True))  # application/x-executable

五、参考

Python库 使用filetype精确判断文件类型_陈新明博客-CSDN博客_filetype python

【转】python通过文件头判断文件类型 - _小苹果 - 博客园

python使用magic模块进行文件类型识别_第一天-CSDN博客_python-magic

python-magic · PyPI

MIME 参考手册

python 通过文件头获取文件类型mimetype相关推荐

  1. curl mimetype类型_根据二进制流及文件头获取文件类型mime-type

    图片格式查看: 用十六进制编辑器察看过图片的文件头,分析的结果,供大家参考: 1.JPEG/JPG - 文件头标识 (2 bytes): $ff, $d8 (SOI) (JPEG 文件标识) - 文件 ...

  2. java file 获取文件类型_Android中Java根据文件头获取文件类型

    前面贴过Android系统内部的MediaFile类来获取文件类型的办法,这个类主要是根据文件的扩展名来判断,其准确性不是很好.具体可查看Android系统使用MediaFile类判断音频文件类型.其 ...

  3. python如何区分文件类型_python通过文件头判断文件类型

    对于提供上传的服务器,需要对上传的文件进行过滤. 本文为大家提供了python通过文件头判断文件类型的方法,避免不必要的麻烦. 分享代码如下 import struct # 支持文件类型 # 用16进 ...

  4. java判断文件头_java通过文件头来判断文件类型

    importjava.io.FileInputStream;importjava.io.IOException;importjava.util.HashMap;importjava.util.Map. ...

  5. php读取某类型文件代码,php代码实现读取文件头判断文件类型

    php代码实现读取文件头判断文件类型,支持图片.rar.exe等后缀. 案例: //为图片的路径可以用d:/upload/11.jpg等绝对路径 $file = fopen($filename, &q ...

  6. mysql文件头标记_PHP根据文件头检测文件类型

    文件签名一般都在文件的头部,如果你用十六进制方式查看文件,你就可以看到文件的一些签名信息.如用uestudio以十六进制方式查看zip格式的文件,其文件内容头部有50 4B 03 04这样的十六进制信 ...

  7. java文件头_Java根据文件头判断文件类型

    public class FileType { private final static Map FILE_TYPE_MAP = new HashMap(); private FileType(){} ...

  8. 通过16进制文件头判断文件类型

    package cn.edu.hactcm.cfcms.utils; import java.io.FileInputStream; import java.io.IOException; impor ...

  9. 根据文件头判断文件类型

    10个字节判断 [java] view plaincopy private static final HashMap<String, String> mFileTypes = new Ha ...

最新文章

  1. Puppet 4 性能提升超2倍,升级前应该你知悉的变化
  2. 3.6 matlab函数文件的定义与调用
  3. 前端学习(3293):effect hook
  4. k8s 基础概念和术语
  5. 说明exit()函数作用的程序
  6. Photoshop 入门教程「8」如何使用裁剪工具?
  7. eplan mysql_EPLAN SQL Server 远程数据库的搭建
  8. java核心技术卷1 所有示例代码
  9. php手机靓号选号系统源码_最好的手机靓号网站源码-鹏博靓号系统
  10. Reeder 5.0.3 将RSS阅读体验发挥到极致
  11. css实现白光划过效果
  12. SparkSQL和HiveSql的对比
  13. 新增网站组网方案与解释说明 模版
  14. 平稳性检验和白噪声检验
  15. 数据中心液冷方式优缺点对比及浸没式液冷表面强化处理
  16. 免费搜索引擎登陆入口
  17. c++ 使用递归求解回文序列问题
  18. 人在四合院:我变成了何雨柱(二)
  19. 连续数值变量的离散化、哑变量
  20. 互联网企业上市基因:团队行业是核心

热门文章

  1. Tensorflow(七)Retrain Google Inception V3
  2. TensorFlow学习笔记之源码分析(3)---- retrain.py(转)
  3. 数据单位:位、字节、字、字长
  4. 【音视频】Ubuntu安装开源H.264标准编解码库x264
  5. vm安装mac虚拟机 vcpu-0错误
  6. 全志 Tina Linux LCD显示屏调试指南 支持MIPI DSI RGB LVDS I8080 SPI等接口,开发板支持百问网T113 D1-H哪吒 DongshanPI-D1s V853
  7. css上滑事件,仿抖音上划和下拉
  8. 【论文极速读】VQ-VAE:一种稀疏表征学习方法
  9. 算法笔记4.1习题_排序
  10. 单片机设计_室内环境智能监测系统(STM32 OLED ESP8266 DHT11 MQ-2 加湿器)