18.7. mimetypes — 将文件名映射到 MIME 类型 — Python 文档
18.7. 模仿类型 — 将文件名映射到 MIME 类型
源代码: :source:`Lib/mimetypes.py`
mimetypes 模块在文件名或 URL 和与文件扩展名关联的 MIME 类型之间进行转换。 提供从文件名到 MIME 类型以及从 MIME 类型到文件扩展名的转换; 后一种转换不支持编码。
该模块提供了一个类和许多方便的功能。 这些函数是这个模块的普通接口,但一些应用程序也可能对这个类感兴趣。
下面描述的函数提供了该模块的主要接口。 如果模块没有被初始化,他们会调用init(),如果他们依赖于init()设置的信息。
- mimetypes.guess_type(url, strict=True)
根据 url 给出的文件名或 URL 猜测文件的类型。 返回值是一个
(type, encoding)
元组,其中 type 是None
如果类型无法被猜测(缺少或未知后缀)或'type/subtype'
,可用于 MIME content-type 标头。encoding 是
None
表示无编码或用于编码的程序名称(例如 compress 或 gzip)。 该编码适合用作 Content-Encoding 标头,not 作为 Content-Transfer-Encoding 标头。 映射是表驱动的。 编码后缀区分大小写; 类型后缀首先区分大小写,然后不区分大小写。可选的 strict 参数是一个标志,指定已知 MIME 类型列表是否仅限于在 IANA 注册的官方类型 。 当 strict 为
True
(默认)时,仅支持 IANA 类型; 当 strict 是False
时,一些额外的非标准但常用的 MIME 类型也被识别。
- mimetypes.guess_all_extensions(type, strict=True)
根据文件的 MIME 类型猜测文件的扩展名,由 type 给出。 返回值是一个字符串列表,给出所有可能的文件扩展名,包括前导点 (
'.'
)。 不保证扩展名与任何特定数据流相关联,但会通过 guess_type() 映射到 MIME 类型 type。可选的 strict 参数与 guess_type() 函数具有相同的含义。
- mimetypes.guess_extension(type, strict=True)
根据文件的 MIME 类型猜测文件的扩展名,由 type 给出。 返回值是一个给出文件扩展名的字符串,包括前导点 (
'.'
)。 不保证扩展名与任何特定数据流相关联,但会通过 guess_type() 映射到 MIME 类型 type。 如果无法猜出 type 的扩展名,则返回None
。可选的 strict 参数与 guess_type() 函数具有相同的含义。
一些附加功能和数据项可用于控制模块的行为。
- mimetypes.init(files=None)
初始化内部数据结构。 如果给定,files 必须是一个文件名序列,用于扩充默认类型映射。 如果省略,则使用的文件名取自 knownfiles; 在 Windows 上,会加载当前的注册表设置。 在 files 或 knownfiles 中命名的每个文件优先于在它之前命名的文件。 允许重复调用 init()。
为 files 指定一个空列表将阻止应用系统默认值:只有众所周知的值才会出现在内置列表中。
2.7 版更改: 以前,Windows 注册表设置被忽略。
- mimetypes.read_mime_types(filename)
- 加载文件 filename 中给出的类型映射(如果存在)。 类型映射作为字典映射文件扩展名返回,包括前导点 (
'.'
) 到'type/subtype'
形式的字符串。 如果文件filename不存在或无法读取,则返回None
。
- mimetypes.add_type(type, ext, strict=True)
添加从 MIME 类型 type 到扩展 ext 的映射。 当扩展名已知时,新类型将替换旧类型。 当类型已知时,扩展名将添加到已知扩展名列表中。
当 strict 为
True
(默认)时,映射将添加到官方 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'
18.7.1. 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_types 和 types_map 初始化。
- types_map_inv
包含两个字典的元组,将 MIME 类型映射到文件扩展名列表:第一个字典用于非标准类型,第二个用于标准类型。 它们由 common_types 和 types_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
,则将信息添加到标准类型列表中,否则添加到非标准类型列表中。2.7 版中的新功能。