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

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

    原文作者:青霄
    原文地址: https://blog.csdn.net/leiwuhen92/article/details/122946453
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞