热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python通过文件头获取文件类型mimetype

一、MIMEType是什么?资源的媒体类型MIME(MultipurposeInternetMailExtensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用

一、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 mimetypes
print(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 filetype
def get_type(file_path):
kind = filetype.guess(file_path)
if kind is None:
print('Cannot guess file type!')
return
print('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/gzip
Cannot guess file type!
'''

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

python-magic 是 libmagic 文件类型识别库的 Python 接口。
libmagic 通过根据预定义的文件类型列表检查文件头来识别文件类型。 此功能由 Unix 命令文件提供给命令行。
《python 通过文件头获取文件类型mimetype》
《python 通过文件头获取文件类型mimetype》

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 参考手册


推荐阅读
  • 丛api的python的简单介绍
    本文目录一览:1、如何使用python利用api获取天气预报 ... [详细]
  • 前言无论使用哪种语言,我们都需要关注性能优化,提高执行效率。选择脚本语言需要持久的速度。在某种程度上,这句话说明了Python作为一种脚 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • 开发笔记:python协程的理解
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了python协程的理解相关的知识,希望对你有一定的参考价值。一、介绍什么是并发?并发的本质就是 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • PG12新增的VACUUM命令的SKIP_LOCKED选项
    PG12版本的VACUUM命令新增了SKIP_LOCKED选项,该选项使得vacuum命令在遇到被lock住的table时可以跳过并被视为成功执行。之前的版本中,vacuum命令会一直处于等待状态。本文还提到了PostgreSQL 12.1版本的相关信息。 ... [详细]
  • 似乎有两种不同的方法可以将字符串转换为字节,如对typeerror的回答所示:str不支持缓冲区接口。这些方法中哪一种比较好或更适合用Python& ... [详细]
  • 项目背景:在玩游戏《坎巴拉太空计划》过程中发现火箭升空的过程比较有意思,想通过程序实现表述其具体升空的过程功能:1.输入变量, ... [详细]
  • 开发笔记:超全的《 Django 入门教程 》上线了,居然还免费!
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了超全的《Django入门教程》上线了,居然还免费!相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 代码如下:#coding:utf-8importosimportsysdefcut_and_paste_file(source,destination):”’sourc ... [详细]
author-avatar
倒叙的时光_SX_126
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有