如何在 Python 中查找文件的 MIME 类型?

pythonserver side programmingprogramming更新于 2023/12/9 2:47:00

在 Python 中的文件处理和操作领域中,确定文件的 MIME(多用途互联网邮件扩展)类型通常至关重要。MIME 类型是用于识别文件内容的性质和格式的标准化标签。它们在各种应用中起着至关重要的作用,例如 Web 开发、电子邮件附件和互联网上的数据传输。能够确定文件的 MIME 类型对于根据其内容执行适当的操作(例如验证、处理或正确显示)至关重要。

在本文中,我们将探讨在 Python 中查找文件 MIME 类型的不同方法。我们将提供分步说明和代码示例来指导您完成整个过程。无论您喜欢使用内置的"mimetypes"模块、"magic"库还是第三方库,本指南都将为您提供相关知识,让您轻松确定任何文件的 MIME 类型。

让我们开始使用 Python 处理文件的旅程,并学习如何查找文件的 MIME 类型!

使用 mimetypes 模块

Python 的标准库包含"mimetypes"模块,它提供了一种直接有效的方法,可以根据文件名或 URL 确定文件的 MIME 类型。该模块利用文件扩展名到 MIME 类型的映射,可以处理多种文件类型。

示例

  • 在下面的代码中,我们导入了"mimetypes"模块,该模块允许我们在 Python 中使用 MIME 类型。

  • "get_mime_type_with_mimetypes()"函数将"filename"作为输入,并使用"mimetypes.guess_type()"返回文件的 MIME 类型。

  • 我们调用"mimetypes.guess_type(filename)"来获取包含 MIME 类型和给定文件编码的元组。

  • 该函数仅返回 MIME 类型,因为编码信息与确定文件的内容类型无关。

import mimetypes

def get_mime_type_with_mimetypes(filename):
    mime_type, encoding = mimetypes.guess_type(filename)
    return mime_type

使用 magic 库

Python 中的"magic"库提供了强大的功能,可以通过检查文件内容来确定文件类型,而不仅仅依赖于文件扩展名。该库基于 Unix 的"file"命令,可以准确检测各种文件格式。

示例

  • 在此示例中,我们导入了"magic"库,该库使我们能够根据文件内容识别文件类型。

  • "get_mime_type_with_magic()"函数将"filename"作为输入,并使用"magic.from_file(filename, mime=True)"返回文件的 MIME 类型。

  • 通过传递"mime=True"作为参数,我们指示"magic.from_file()"函数仅返回 MIME 类型,而忽略任何其他信息。

import magic

def get_mime_type_with_magic(filename):
    mime_type = magic.from_file(filename, mime=True)
    return mime_type

使用 fileinput 模块

Python 中的"fileinput"模块可用于迭代来自多个输入源(包括文件)的行。尽管没有明确设计用于查找 MIME 类型,但我们可以利用"mimetypes"模块来确定文件的 MIME 类型。

示例

  • 在此示例中,我们导入了"fileinput"和"mimetypes"模块,分别用于处理文件输入和 MIME 类型。

  • "get_mime_type_with_fileinput()"函数将"filename"作为输入,并使用"fileinput"模块结合"mimetypes.guess_type()"返回文件的 MIME 类型。

  • 我们使用"fileinput.input(files=(filename,), mode='rb')"以二进制读取模式打开"filename"指定的文件。

  • "for"循环遍历输入文件的行。但是,我们只对第一行确定 MIME 类型感兴趣,因此一旦获得有效的 MIME 类型,我们就会退出循环。

  • 在循环内部,我们调用"mimetypes.guess_type(fileinput.filename())"来获取当前正在处理的文件的 MIME 类型。

  • 如果"mimetype"尚未设置(即为 None),我们将"mime_type"设置为"mimetypes.guess_type()"返回的 MIME 类型。

  • 找到 MIME 类型或到达文件末尾后,我们使用"fileinput.close()"关闭"fileinput"对象。

import fileinput
import mimetypes

def get_mime_type_with_fileinput(filename):
    mime_type = None
    for line in fileinput.input(files=(filename,), mode='rb'):
  if not mime_type:
          mime_type = mimetypes.guess_type(fileinput.filename())
          fileinput.close()
    return mime_type

使用 python−magic 库

"python−magic"库是 libmagic C 库的 Python 绑定,与 Unix"file"命令使用的库相同。它根据文件内容提供准确的文件类型识别,并能处理各种文件格式。

示例

  • 在此示例中,我们导入"magic"库以访问文件类型识别功能。

  • "get_mime_type_with_python_magic()"函数以"filename"作为输入,并使用"python−magic"库返回文件的 MIME 类型。

  • 我们使用"magic.Magic(mime=True)"创建一个"Magic"对象,并传递"mime=True"作为参数,以指示该对象仅返回 MIME 类型。

  • "Magic"对象的"from_file(filename)"方法用于根据给定文件的内容确定其 MIME 类型。

import magic

def get_mime_type_with_python_magic(filename):
    mime_type = magic.Magic(mime=True).from_file(filename)
    return mime_type

使用 python−magic−bin 库

"python−magic−bin"库是 libmagic C 库的另一个 Python 绑定,类似于"python−magic"。但是,它需要单独安装 libmagic 库,使其成为 MIME 类型检测的替代选项。

示例

  • 在此示例中,我们导入"magic"库以访问文件类型识别功能。

  • "get_mime_type_with_python_magic_bin()"函数将"filename"作为输入,并使用"python−magic−bin"库返回文件的 MIME 类型。

  • 我们调用"magic.detect_from_filename(filename)"来获取包含文件信息(包括 MIME 类型)的"Magic"对象。

  • "Magic"对象的"mime_type"属性提供所需的文件 MIME 类型。

import magic

def get_mime_type_with_python_magic_bin(filename):
    mime_type = magic.detect_from_filename(filename).mime_type
    return mime_type

确定文件的 MIME 类型是文件处理和操作的一个重要方面,尤其是在 Web 开发和数据传输场景中。在本文中,我们探讨了使用 Python 查找文件 MIME 类型的各种方法。我们讨论了内置的"mimetypes"模块、"magic"库及其变体"python-magic"和"python-magic-bin",所有这些都提供了可靠且有效的方法来确定文件的 MIME 类型。

有了这些可用的知识,您可以自信地将 MIME 类型检测纳入您的 Python 项目中


相关文章