• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1:mod:`!mimetypes` --- Map filenames to MIME types
2=================================================
3
4.. module:: mimetypes
5   :synopsis: Mapping of filename extensions to MIME types.
6
7.. sectionauthor:: Fred L. Drake, Jr. <fdrake@acm.org>
8
9**Source code:** :source:`Lib/mimetypes.py`
10
11.. index:: pair: MIME; content type
12
13--------------
14
15The :mod:`mimetypes` module converts between a filename or URL and the MIME type
16associated with the filename extension.  Conversions are provided from filename
17to MIME type and from MIME type to filename extension; encodings are not
18supported for the latter conversion.
19
20The module provides one class and a number of convenience functions. The
21functions are the normal interface to this module, but some applications may be
22interested in the class as well.
23
24The functions described below provide the primary interface for this module.  If
25the module has not been initialized, they will call :func:`init` if they rely on
26the information :func:`init` sets up.
27
28
29.. function:: guess_type(url, strict=True)
30
31   .. index:: pair: MIME; headers
32
33   Guess the type of a file based on its filename, path or URL, given by *url*.
34   URL can be a string or a :term:`path-like object`.
35
36   The return value is a tuple ``(type, encoding)`` where *type* is ``None`` if the
37   type can't be guessed (missing or unknown suffix) or a string of the form
38   ``'type/subtype'``, usable for a MIME :mailheader:`content-type` header.
39
40   *encoding* is ``None`` for no encoding or the name of the program used to encode
41   (e.g. :program:`compress` or :program:`gzip`). The encoding is suitable for use
42   as a :mailheader:`Content-Encoding` header, **not** as a
43   :mailheader:`Content-Transfer-Encoding` header. The mappings are table driven.
44   Encoding suffixes are case sensitive; type suffixes are first tried case
45   sensitively, then case insensitively.
46
47   The optional *strict* argument is a flag specifying whether the list of known MIME types
48   is limited to only the official types `registered with IANA
49   <https://www.iana.org/assignments/media-types/media-types.xhtml>`_.
50   When *strict* is ``True`` (the default), only the IANA types are supported; when
51   *strict* is ``False``, some additional non-standard but commonly used MIME types
52   are also recognized.
53
54   .. versionchanged:: 3.8
55      Added support for *url* being a :term:`path-like object`.
56
57   .. deprecated:: 3.13
58      Passing a file path instead of URL is :term:`soft deprecated`.
59      Use :func:`guess_file_type` for this.
60
61
62.. function:: guess_file_type(path, *, strict=True)
63
64   .. index:: pair: MIME; headers
65
66   Guess the type of a file based on its path, given by *path*.
67   Similar to the :func:`guess_type` function, but accepts a path instead of URL.
68   Path can be a string, a bytes object or a :term:`path-like object`.
69
70   .. versionadded:: 3.13
71
72
73.. function:: guess_all_extensions(type, strict=True)
74
75   Guess the extensions for a file based on its MIME type, given by *type*. The
76   return value is a list of strings giving all possible filename extensions,
77   including the leading dot (``'.'``).  The extensions are not guaranteed to have
78   been associated with any particular data stream, but would be mapped to the MIME
79   type *type* by :func:`guess_type` and :func:`guess_file_type`.
80
81   The optional *strict* argument has the same meaning as with the :func:`guess_type` function.
82
83
84.. function:: guess_extension(type, strict=True)
85
86   Guess the extension for a file based on its MIME type, given by *type*. The
87   return value is a string giving a filename extension, including the leading dot
88   (``'.'``).  The extension is not guaranteed to have been associated with any
89   particular data stream, but would be mapped to the MIME type *type* by
90   :func:`guess_type` and :func:`guess_file_type`.
91   If no extension can be guessed for *type*, ``None`` is returned.
92
93   The optional *strict* argument has the same meaning as with the :func:`guess_type` function.
94
95Some additional functions and data items are available for controlling the
96behavior of the module.
97
98
99.. function:: init(files=None)
100
101   Initialize the internal data structures.  If given, *files* must be a sequence
102   of file names which should be used to augment the default type map.  If omitted,
103   the file names to use are taken from :const:`knownfiles`; on Windows, the
104   current registry settings are loaded.  Each file named in *files* or
105   :const:`knownfiles` takes precedence over those named before it.  Calling
106   :func:`init` repeatedly is allowed.
107
108   Specifying an empty list for *files* will prevent the system defaults from
109   being applied: only the well-known values will be present from a built-in list.
110
111   If *files* is ``None`` the internal data structure is completely rebuilt to its
112   initial default value. This is a stable operation and will produce the same results
113   when called multiple times.
114
115   .. versionchanged:: 3.2
116      Previously, Windows registry settings were ignored.
117
118
119.. function:: read_mime_types(filename)
120
121   Load the type map given in the file *filename*, if it exists.  The type map is
122   returned as a dictionary mapping filename extensions, including the leading dot
123   (``'.'``), to strings of the form ``'type/subtype'``.  If the file *filename*
124   does not exist or cannot be read, ``None`` is returned.
125
126
127.. function:: add_type(type, ext, strict=True)
128
129   Add a mapping from the MIME type *type* to the extension *ext*. When the
130   extension is already known, the new type will replace the old one. When the type
131   is already known the extension will be added to the list of known extensions.
132
133   When *strict* is ``True`` (the default), the mapping will be added to the
134   official MIME types, otherwise to the non-standard ones.
135
136
137.. data:: inited
138
139   Flag indicating whether or not the global data structures have been initialized.
140   This is set to ``True`` by :func:`init`.
141
142
143.. data:: knownfiles
144
145   .. index:: single: file; mime.types
146
147   List of type map file names commonly installed.  These files are typically named
148   :file:`mime.types` and are installed in different locations by different
149   packages.
150
151
152.. data:: suffix_map
153
154   Dictionary mapping suffixes to suffixes.  This is used to allow recognition of
155   encoded files for which the encoding and the type are indicated by the same
156   extension.  For example, the :file:`.tgz` extension is mapped to :file:`.tar.gz`
157   to allow the encoding and type to be recognized separately.
158
159
160.. data:: encodings_map
161
162   Dictionary mapping filename extensions to encoding types.
163
164
165.. data:: types_map
166
167   Dictionary mapping filename extensions to MIME types.
168
169
170.. data:: common_types
171
172   Dictionary mapping filename extensions to non-standard, but commonly found MIME
173   types.
174
175
176An example usage of the module::
177
178   >>> import mimetypes
179   >>> mimetypes.init()
180   >>> mimetypes.knownfiles
181   ['/etc/mime.types', '/etc/httpd/mime.types', ... ]
182   >>> mimetypes.suffix_map['.tgz']
183   '.tar.gz'
184   >>> mimetypes.encodings_map['.gz']
185   'gzip'
186   >>> mimetypes.types_map['.tgz']
187   'application/x-tar-gz'
188
189
190.. _mimetypes-objects:
191
192MimeTypes Objects
193-----------------
194
195The :class:`MimeTypes` class may be useful for applications which may want more
196than one MIME-type database; it provides an interface similar to the one of the
197:mod:`mimetypes` module.
198
199
200.. class:: MimeTypes(filenames=(), strict=True)
201
202   This class represents a MIME-types database.  By default, it provides access to
203   the same database as the rest of this module. The initial database is a copy of
204   that provided by the module, and may be extended by loading additional
205   :file:`mime.types`\ -style files into the database using the :meth:`read` or
206   :meth:`readfp` methods.  The mapping dictionaries may also be cleared before
207   loading additional data if the default data is not desired.
208
209   The optional *filenames* parameter can be used to cause additional files to be
210   loaded "on top" of the default database.
211
212
213   .. attribute:: MimeTypes.suffix_map
214
215      Dictionary mapping suffixes to suffixes.  This is used to allow recognition of
216      encoded files for which the encoding and the type are indicated by the same
217      extension.  For example, the :file:`.tgz` extension is mapped to :file:`.tar.gz`
218      to allow the encoding and type to be recognized separately.  This is initially a
219      copy of the global :data:`suffix_map` defined in the module.
220
221
222   .. attribute:: MimeTypes.encodings_map
223
224      Dictionary mapping filename extensions to encoding types.  This is initially a
225      copy of the global :data:`encodings_map` defined in the module.
226
227
228   .. attribute:: MimeTypes.types_map
229
230      Tuple containing two dictionaries, mapping filename extensions to MIME types:
231      the first dictionary is for the non-standards types and the second one is for
232      the standard types. They are initialized by :data:`common_types` and
233      :data:`types_map`.
234
235
236   .. attribute:: MimeTypes.types_map_inv
237
238      Tuple containing two dictionaries, mapping MIME types to a list of filename
239      extensions: the first dictionary is for the non-standards types and the
240      second one is for the standard types. They are initialized by
241      :data:`common_types` and :data:`types_map`.
242
243
244   .. method:: MimeTypes.guess_extension(type, strict=True)
245
246      Similar to the :func:`guess_extension` function, using the tables stored as part
247      of the object.
248
249
250   .. method:: MimeTypes.guess_type(url, strict=True)
251
252      Similar to the :func:`guess_type` function, using the tables stored as part of
253      the object.
254
255
256   .. method:: MimeTypes.guess_file_type(path, *, strict=True)
257
258      Similar to the :func:`guess_file_type` function, using the tables stored
259      as part of the object.
260
261      .. versionadded:: 3.13
262
263
264   .. method:: MimeTypes.guess_all_extensions(type, strict=True)
265
266      Similar to the :func:`guess_all_extensions` function, using the tables stored
267      as part of the object.
268
269
270   .. method:: MimeTypes.read(filename, strict=True)
271
272      Load MIME information from a file named *filename*.  This uses :meth:`readfp` to
273      parse the file.
274
275      If *strict* is ``True``, information will be added to list of standard types,
276      else to the list of non-standard types.
277
278
279   .. method:: MimeTypes.readfp(fp, strict=True)
280
281      Load MIME type information from an open file *fp*.  The file must have the format of
282      the standard :file:`mime.types` files.
283
284      If *strict* is ``True``, information will be added to the list of standard
285      types, else to the list of non-standard types.
286
287
288   .. method:: MimeTypes.read_windows_registry(strict=True)
289
290      Load MIME type information from the Windows registry.
291
292      .. availability:: Windows.
293
294      If *strict* is ``True``, information will be added to the list of standard
295      types, else to the list of non-standard types.
296
297      .. versionadded:: 3.2
298
299
300   .. method:: MimeTypes.add_type(type, ext, strict=True)
301
302      Add a mapping from the MIME type *type* to the extension *ext*. When the
303      extension is already known, the new type will replace the old one. When the type
304      is already known the extension will be added to the list of known extensions.
305
306      When *strict* is ``True`` (the default), the mapping will be added to the
307      official MIME types, otherwise to the non-standard ones.
308