# 19.5. `mimetypes` - 将文件名映射到MIME类型

源代码： Lib / mimetypes.py

`mimetypes`模块在文件名或URL和文件扩展名关联的MIME类型之间进行转换。提供从文件名到MIME类型和从MIME类型到文件扩展名的转换；后面的转换不支持编码。

该模块提供一个类和多个方便功能。函数是这个模块的正常接口，但是一些应用程序也可能对类感兴趣。

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

`mimetypes.``guess_type`(url, strict=True)

  根据文件名或URL（由url给出）猜测文件类型。返回值为元组`（类型， 编码）`其中类型为`None`如果类型不能猜测（缺少或未知的后缀）或者一个形式为`'type/subtype'`的字符串，可用于MIME content-type

  编码为`None`，无编码或用于编码的程序名称。compress或gzip）。该编码适合用作Content-Encoding t>头，而不是作为Content-Transfer-Encoding头。映射是表驱动的。编码后缀区分大小写；类型后缀首先尝试敏感，然后情况不敏感。

  可选的strict参数是一个标志，指定已知MIME类型的列表是否仅限于使用IANA注册的官方类型。当严格为`True`（默认值）时，仅支持IANA类型；当严格为`False`时，还会识别一些其他非标准但常用的MIME类型。

`mimetypes.``guess_all_extensions`(type, strict=True)

  根据由类型给出的MIME类型猜测文件的扩展名。返回值是给出所有可能的文件扩展名的字符串列表，包括前导点（`'.'`）。这些扩展不能保证与任何特定数据流相关联，但会通过`guess_type()`映射到类型的MIME类型。

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

`mimetypes.``guess_extension`(type, strict=True)

  根据由类型给出的MIME类型猜测文件的扩展名。返回值是一个给出文件名扩展名的字符串，包括前导点（`'.'`）。该扩展不能保证已与任何特定数据流相关联，但将通过`guess_type()`映射到MIME类型类型。如果未能为类型猜出扩展名，则返回`None`。

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

一些附加功能和数据项可用于控制模块的行为。

`mimetypes.``init`(files=None)

  初始化内部数据结构。如果给定，文件必须是应用于扩充默认类型映射的文件名的序列。如果省略，要使用的文件名取自`knownfiles`；在Windows上，当前注册表设置已加载。在文件或`knownfiles`中命名的每个文件优先于在其之前命名的文件。重复调用`init()`。

  为文件指定空列表将防止应用系统默认值：只有内建列表中会显示众所周知的值。

  在版本3.2中更改：以前，Windows注册表设置被忽略。

`mimetypes.``read_mime_types`(filename)

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

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

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

  当strict是`True`（默认值）时，映射将添加到官方MIME类型，否则添加到非标准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`

模块的示例用法：

    >>> 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'

## 19.5.1. MimeTypes Objects

`MimeTypes`类可能对可能需要多个MIME类型数据库的应用程序有用；它提供类似于`mimetypes`

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

  此类表示MIME类型数据库。默认情况下，它提供对与此模块的其余部分相同的数据库的访问。The initial database is a copy of that provided by the module, and may be extended by loading additional `mime.types`-style files into the database using the `read()` or `readfp()` methods. 如果不需要默认数据，则也可以在加载附加数据之前清除映射字典。

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

`MimeTypes.``suffix_map`

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

`MimeTypes.``encodings_map`

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

`MimeTypes.``types_map`

  Tuple包含两个字典，将文件扩展名映射到MIME类型：第一个字典用于非标准类型，第二个字典用于标准类型。它们由`common_types`和`types_map`初始化。

`MimeTypes.``types_map_inv`

  Tuple包含两个字典，将MIME类型映射到文件扩展名列表：第一个字典用于非标准类型，第二个字典用于标准类型。它们由`common_types`和`types_map`初始化。

`MimeTypes.``guess_extension`(type, strict=True)

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

`MimeTypes.``guess_type`(url, strict=True)

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

`MimeTypes.``guess_all_extensions`(type, strict=True)

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

`MimeTypes.``read`(filename, strict=True)

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

  如果严格是`True`，信息将被添加到标准类型的列表，否则添加到非标准类型的列表。

`MimeTypes.``readfp`(fp, strict=True)

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

  如果严格为`True`，则信息将添加到标准类型列表中，否则添加到非标准类型列表中。

`MimeTypes.``read_windows_registry`(strict=True)

  从Windows注册表加载MIME类型信息。可用性：Windows。

  如果严格为`True`，则信息将添加到标准类型列表中，否则添加到非标准类型列表中。

  版本3.2中的新功能。