mimetypes - 将文件名映射到 MIME 类型

源代码: Lib/mimetypes.py


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

该模块提供了一个类和许多便捷函数。这些函数是该模块的常规接口,但某些应用程序也可能对该类感兴趣。

以下描述的函数提供了该模块的主要接口。如果模块尚未初始化,如果它们依赖于 init() 设置的信息,则它们将调用 init()

mimetypes.guess_type(url, strict=True)

根据 url 给出的文件名、路径或 URL 猜测文件的类型。URL 可以是字符串或 类路径对象

返回值是一个元组 (type, encoding),其中如果无法猜测类型(缺少或未知的后缀),则 typeNone,或者是一个字符串,格式为 'type/subtype',可用于 MIME content-type 标头。

对于无编码,encodingNone,或者为用于编码的程序的名称(例如 compressgzip)。该编码适用于用作 Content-Encoding 标头,而适用于 Content-Transfer-Encoding 标头。映射是表驱动的。编码后缀区分大小写;类型后缀首先区分大小写,然后不区分大小写。

可选的 strict 参数是一个标志,用于指定已知 MIME 类型列表是否仅限于 在 IANA 注册的官方类型。当 strictTrue(默认值)时,仅支持 IANA 类型;当 strictFalse 时,还会识别一些其他非标准但常用的 MIME 类型。

在 3.8 版更改: 添加了对 url 作为 类路径对象 的支持。

mimetypes.guess_all_extensions(type, strict=True)

根据 type 给出的 MIME 类型猜测文件的扩展名。返回值是一个字符串列表,给出所有可能的文件名扩展名,包括前导点 ('.')。不能保证扩展名已与任何特定数据流相关联,但 guess_type() 会将扩展名映射到 MIME 类型 type

可选的 strict 参数与 guess_type() 函数具有相同的含义。

mimetypes.guess_extension(type, strict=True)

根据 type 给出的 MIME 类型猜测文件的扩展名。返回值是一个字符串,给出文件名扩展名,包括前导点 ('.')。不能保证扩展名已与任何特定数据流相关联,但 guess_type() 会将扩展名映射到 MIME 类型 type。如果无法猜测 type 的扩展名,则返回 None

可选的 strict 参数与 guess_type() 函数具有相同的含义。

还有一些其他函数和数据项可用于控制模块的行为。

mimetypes.init(files=None)

初始化内部数据结构。如果给出,files 必须是一个文件名序列,应用于扩充默认类型映射。如果省略,则要使用的文件名取自 knownfiles;在 Windows 上,将加载当前注册表设置。filesknownfiles 中命名的每个文件都优先于之前命名的文件。允许重复调用 init()

files 指定一个空列表将阻止应用系统默认值:只有来自内置列表的已知值才会出现。

如果 filesNone,则内部数据结构将完全重建为其初始默认值。这是一个稳定的操作,多次调用时将产生相同的结果。

在 3.2 版更改: 以前,Windows 注册表设置会被忽略。

mimetypes.read_mime_types(filename)

加载文件 filename 中给出的类型映射(如果存在)。类型映射作为字典返回,将文件名扩展名(包括前导点 ('.'))映射到格式为 'type/subtype' 的字符串。如果文件 filename 不存在或无法读取,则返回 None

mimetypes.add_type(type, ext, strict=True)

添加从 MIME 类型 type 到扩展名 ext 的映射。当扩展名已知时,新类型将替换旧类型。当类型已知时,扩展名将被添加到已知扩展名列表中。

strictTrue(默认值)时,映射将被添加到官方 MIME 类型中,否则将被添加到非标准类型中。

mimetypes.inited

指示全局数据结构是否已初始化的标志。这将由 init() 设置为 True

mimetypes.knownfiles

通常安装的类型映射文件名的列表。这些文件通常命名为 mime.types,并由不同的软件包安装在不同的位置。

mimetypes.suffix_map

将后缀映射到后缀的字典。这用于识别编码文件,其中编码和类型由相同的扩展名指示。例如,.tgz 扩展名映射到 .tar.gz,以便分别识别编码和类型。

mimetypes.encodings_map

将文件名扩展名映射到编码类型的字典。

mimetypes.types_map

将文件名扩展名映射到 MIME 类型的字典。

mimetypes.common_types

将文件名扩展名映射到非标准但常见的 MIME 类型的字典。

模块的使用示例

>>> import mimetypes
>>> mimetypes.init()
>>> mimetypes.knownfiles
['/etc/mime.types', '/etc/httpd/mime.types', ... ]
>>> mimetypes.suffix_map['.tgz']
'.tar.gz'
>>> mimetypes.encodings_map['.gz']
'gzip'
>>> mimetypes.types_map['.tgz']
'application/x-tar-gz'

MimeTypes 对象

MimeTypes 类对于可能需要多个 MIME 类型数据库的应用程序很有用;它提供了一个类似于 mimetypes 模块的接口。

class mimetypes.MimeTypes(filenames=(), strict=True)

此类表示 MIME 类型数据库。默认情况下,它提供对此模块其余部分使用的相同数据库的访问权限。初始数据库是模块提供的数据库的副本,可以通过使用 read()readfp() 方法将其他 mime.types 样式文件加载到数据库中来扩展。如果不需要默认数据,则在加载其他数据之前也可以清除映射字典。

可选的 filenames 参数可用于使其他文件加载到默认数据库的“顶部”。

suffix_map

将后缀映射到后缀的字典。这用于识别编码文件,其中编码和类型由相同的扩展名指示。例如,.tgz 扩展名映射到 .tar.gz,以便分别识别编码和类型。这最初是模块中定义的全局 suffix_map 的副本。

encodings_map

将文件名扩展名映射到编码类型的字典。这最初是模块中定义的全局 encodings_map 的副本。

types_map

包含两个字典的元组,将文件名扩展名映射到 MIME 类型:第一个字典用于非标准类型,第二个字典用于标准类型。它们由 common_typestypes_map 初始化。

types_map_inv

包含两个字典的元组,将 MIME 类型映射到文件名扩展名列表:第一个字典用于非标准类型,第二个字典用于标准类型。它们由 common_typestypes_map 初始化。

guess_extension(type, strict=True)

类似于 guess_extension() 函数,使用存储为对象一部分的表。

guess_type(url, strict=True)

类似于 guess_type() 函数,使用存储为对象一部分的表。

guess_all_extensions(type, strict=True)

类似于 guess_all_extensions() 函数,使用存储为对象一部分的表。

read(filename, strict=True)

从名为 *filename* 的文件中加载 MIME 信息。这将使用 readfp() 来解析文件。

如果 *strict* 为 True,则信息将添加到标准类型列表中,否则将添加到非标准类型列表中。

readfp(fp, strict=True)

从打开的文件 *fp* 中加载 MIME 类型信息。该文件必须具有标准 mime.types 文件的格式。

如果 *strict* 为 True,则信息将添加到标准类型列表中,否则将添加到非标准类型列表中。

read_windows_registry(strict=True)

从 Windows 注册表加载 MIME 类型信息。

可用性:Windows。

如果 *strict* 为 True,则信息将添加到标准类型列表中,否则将添加到非标准类型列表中。

3.2 版新增。