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


在 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 类型。

  • 如果尚未设置“mime_type”(即为 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 项目中。

更新于:2023年9月11日

7K+ 次浏览

启动您的 职业生涯

完成课程获得认证

开始学习
广告