mimetypes.md
1> **Источник:** https://python-all.ru/3.16/library/mimetypes.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `mimetypes` – сопоставление имён файлов с MIME-типами89**Исходный код:** [Lib/mimetypes.py](https://python-all.ru/src/main/Lib/mimetypes.py)1011---1213Модуль `mimetypes` преобразует имя файла или URL в MIME-тип, связанный с расширением файла. Предусмотрены преобразования из имени файла в MIME-тип и из MIME-типа в расширение файла; кодировки не поддерживаются для последнего преобразования.1415Модуль предоставляет один класс и ряд вспомогательных функций. Функции – это основной интерфейс к модулю, но некоторые приложения могут заинтересоваться и классом.1617Описанные ниже функции предоставляют основной интерфейс для этого модуля. Если модуль не был инициализирован, они вызовут [`init()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.init), если полагаются на информацию, заданную с помощью `init()`.1819#### `mimetypes.guess_type(url, strict=True)`2021Определяет тип файла по его имени, пути или URL, заданным *url*. URL может быть строкой или [path-подобным объектом](https://python-all.ru/3.16/glossary.html#term-path-like-object).2223Возвращаемое значение – кортеж `(type, encoding)`, где *type* равен `None`, если type не удалось определить (отсутствует или неизвестно расширение), или строка вида `'type/subtype'`, пригодная для использования в заголовке MIME *content-type*.2425*encoding* равно `None`, если кодировка отсутствует, или имени программы, используемой для кодирования (например, **compress** или **gzip**). Эта кодировка подходит для использования в заголовке *Content-Encoding*, **а не** в заголовке *Content-Transfer-Encoding*. Соответствия задаются таблицами. Суффиксы кодировок чувствительны к регистру. Сначала поиск соответствий суффиксов и суффиксов типов выполняется с учётом регистра, затем без учёта регистра.2627Необязательный аргумент *strict* – это флаг, указывающий, ограничивается ли список известных MIME-типов только официальными типами, [зарегистрированными в IANA](https://python-all.ru/3.16/library/mimetypes.html). Однако поведение этого модуля также зависит от операционной системы. Могут быть идентифицированы только те типы файлов, которые распознаются ОС или явно зарегистрированы во внутренней базе данных Python. Когда *strict* равен `True` (значение по умолчанию), поддерживаются только типы IANA; когда *strict* равен `False`, распознаются также некоторые дополнительные нестандартные, но часто используемые MIME-типы.2829Изменено в версии 3.8: Добавлена поддержка *url* в качестве [path-подобного объекта](https://python-all.ru/3.16/glossary.html#term-path-like-object).3031[Мягко устарело](https://python-all.ru/3.16/glossary.html#term-soft-deprecated) с версии 3.13: Передача пути к файлу вместо URL. Используйте для этого [`guess_file_type()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.guess_file_type).3233#### `mimetypes.guess_file_type(path, *, strict=True)`3435Определяет тип файла по его пути, заданному *path*. Аналогично функции [`guess_type()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.guess_type), но принимает путь вместо URL. Путь может быть строкой, объектом bytes или [path-подобным объектом](https://python-all.ru/3.16/glossary.html#term-path-like-object).3637Добавлено в версии 3.13.3839#### `mimetypes.guess_all_extensions(type, strict=True)`4041Определяет расширения для файла на основе его MIME-типа, заданного *type*. Возвращаемое значение – список строк, содержащий все возможные расширения файла, включая начальную точку (`'.'`). Расширения не гарантируют, что были связаны с каким-либо конкретным потоком данных, но будут сопоставлены с MIME-типом *type* функциями [`guess_type()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.guess_type) и [`guess_file_type()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.guess_file_type).4243Необязательный аргумент *strict* имеет то же значение, что и в функции [`guess_type()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.guess_type).4445#### `mimetypes.guess_extension(type, strict=True)`4647Определяет расширение для файла на основе его MIME-типа, заданного *type*. Возвращаемое значение – строка, содержащая расширение файла, включая начальную точку (`'.'`). Расширение не гарантирует, что было связано с каким-либо конкретным потоком данных, но будет сопоставлено с MIME-типом *type* функциями [`guess_type()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.guess_type) и [`guess_file_type()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.guess_file_type). Если расширение не может быть определено для *type*, возвращается `None`.4849Необязательный аргумент *strict* имеет то же значение, что и в функции [`guess_type()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.guess_type).5051Некоторые дополнительные функции и элементы данных доступны для управления поведением модуля.5253#### `mimetypes.init(files=None)`5455Инициализирует внутренние структуры данных. Если задан, *files* должен быть последовательностью имён файлов, которые следует использовать для дополнения карты типов по умолчанию. Если не указан, используемые имена файлов берутся из [`knownfiles`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.knownfiles); в Windows загружаются текущие настройки реестра. Каждый файл, указанный в *files* или `knownfiles`, имеет приоритет над указанными ранее. Допускается многократный вызов `init()`.5657Указание пустого списка для *files* предотвратит применение системных значений по умолчанию: будут присутствовать только известные значения из встроенного списка.5859Если *files* равен `None`, внутренняя структура данных полностью перестраивается в исходное значение по умолчанию. Это стабильная операция и при многократном вызове будет выдавать одинаковые результаты.6061Изменено в версии 3.2: Ранее настройки реестра Windows игнорировались.6263#### `mimetypes.read_mime_types(filename)`6465Загружает карту типов из файла *filename*, если он существует. Карта типов возвращается в виде словаря, сопоставляющего расширения файлов, включая начальную точку (`'.'`), со строками вида `'type/subtype'`. Если файл *filename* не существует или не может быть прочитан, возвращается `None`.6667#### `mimetypes.add_type(type, ext, strict=True)`6869Добавляет соответствие MIME-типа *type* расширению *ext*. Если расширение уже известно, новый тип заменит старый. Если тип уже известен, расширение будет добавлено в список известных расширений. Допустимые расширения – пустая строка или начинаются с `'.'`.7071Зарегистрированные расширения в нижнем регистре сопоставляются без учёта регистра.7273Если *strict* равно `True` (значение по умолчанию), соответствие добавляется в официальные MIME-типы, иначе – в нестандартные.7475Устарело с версии 3.14: значения *ext*, не начинающиеся с `'.'`, считаются устаревшими.7677Изменено в версии 3.16.0a0 (не выпущена): теперь *ext* должен начинаться с `'.'`. В противном случае возбуждается [`ValueError`](https://python-all.ru/3.16/library/exceptions.html#ValueError).7879#### `mimetypes.inited`8081Флаг, указывающий, были ли инициализированы глобальные структуры данных. Устанавливается в `True` функцией [`init()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.init).8283#### `mimetypes.knownfiles`8485Список имён файлов карт типов, которые обычно устанавливаются. Обычно эти файлы называются `mime.types` и устанавливаются разными пакетами в разные расположения.8687#### `mimetypes.suffix_map`8889Словарь, отображающий одни суффиксы на другие. Используется для распознавания закодированных файлов, у которых кодировка и тип указываются одним и тем же расширением. Например, расширение `.tgz` отображается на `.tar.gz`, чтобы кодировку и тип можно было распознавать по отдельности.9091#### `mimetypes.encodings_map`9293Словарь, отображающий расширения имён файлов на типы кодировок.9495#### `mimetypes.types_map`9697Словарь, отображающий расширения имён файлов на MIME‑типы.9899#### `mimetypes.common_types`100101Словарь, отображающий расширения имён файлов на нестандартные, но часто встречающиеся MIME‑типы.102103Пример использования модуля:104105```python106>>> import mimetypes107>>> mimetypes.init()108>>> mimetypes.knownfiles109['/etc/mime.types', '/etc/httpd/mime.types', ... ]110>>> mimetypes.suffix_map['.tgz']111'.tar.gz'112>>> mimetypes.encodings_map['.gz']113'gzip'114>>> mimetypes.types_map['.tgz']115'application/x-tar-gz'116```117118## Объекты MimeTypes119120Класс [`MimeTypes`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.MimeTypes) может быть полезен приложениям, которым требуется более одной базы MIME‑типов; он предоставляет интерфейс, похожий на интерфейс модуля `mimetypes`.121122#### `class mimetypes.MimeTypes(filenames=(), strict=True)`123124Этот класс представляет базу MIME‑типов. По умолчанию он предоставляет доступ к той же базе, что и остальная часть модуля. Изначальная база – копия базы модуля, и её можно расширить, загружая в неё дополнительные файлы в стиле `mime.types` с помощью методов [`read()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.MimeTypes.read) или [`readfp()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.MimeTypes.readfp). Словари отображений можно очистить перед загрузкой дополнительных данных, если данные по умолчанию не нужны.125126С помощью необязательного параметра *filenames* можно загрузить дополнительные файлы «поверх» базы по умолчанию.127128#### `suffix_map`129130Словарь, отображающий одни суффиксы на другие. Используется для распознавания закодированных файлов, у которых кодировка и тип указываются одним и тем же расширением. Например, расширение `.tgz` отображается на `.tar.gz`, чтобы кодировку и тип можно было распознавать по отдельности. Изначально это копия глобального [`suffix_map`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.suffix_map), определённого в модуле.131132#### `encodings_map`133134Словарь, отображающий расширения имён файлов на типы кодировок. Изначально это копия глобального [`encodings_map`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.encodings_map), определённого в модуле.135136#### `types_map`137138Кортеж из двух словарей, отображающих расширения имён файлов на MIME‑типы: первый словарь – для нестандартных типов, второй – для стандартных. Они инициализируются функциями [`common_types`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.common_types) и [`types_map`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.types_map).139140#### `types_map_inv`141142Кортеж из двух словарей, отображающих MIME‑типы на список расширений имён файлов: первый словарь – для нестандартных типов, второй – для стандартных. Они инициализируются функциями [`common_types`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.common_types) и [`types_map`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.types_map).143144#### `guess_extension(type, strict=True)`145146Аналогично функции [`guess_extension()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.guess_extension), но используются таблицы, хранящиеся в составе объекта.147148#### `guess_type(url, strict=True)`149150Аналогично функции [`guess_type()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.guess_type), но используются таблицы, хранящиеся в составе объекта.151152#### `guess_file_type(path, *, strict=True)`153154Аналогично функции [`guess_file_type()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.guess_file_type), но с использованием таблиц, хранящихся как часть объекта.155156Добавлено в версии 3.13.157158#### `guess_all_extensions(type, strict=True)`159160Аналогично функции [`guess_all_extensions()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.guess_all_extensions), но с использованием таблиц, хранящихся как часть объекта.161162#### `read(filename, strict=True)`163164Загружает информацию MIME из файла с именем *filename*. Для разбора файла используется [`readfp()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.MimeTypes.readfp).165166Если *strict* равно `True`, информация добавляется в список стандартных типов, иначе – в список нестандартных.167168#### `readfp(fp, strict=True)`169170Загружает информацию о MIME-типах из открытого файла *fp*. Файл должен иметь формат стандартных файлов `mime.types`.171172Если *strict* равно `True`, информация добавляется в список стандартных типов, иначе – в список нестандартных.173174#### `read_windows_registry(strict=True)`175176Загружает информацию о MIME-типах из реестра Windows.177178[Доступность](https://python-all.ru/3.16/library/intro.html#availability): Windows.179180Если *strict* равно `True`, информация добавляется в список стандартных типов, иначе – в список нестандартных.181182Добавлено в версии 3.2.183184#### `add_type(type, ext, strict=True)`185186Добавляет соответствие между MIME-типом *type* и расширением *ext*. Допустимые расширения начинаются с точки «.» или пусты. Если расширение уже известно, новый тип заменяет старый. Если тип уже известен, расширение добавляется в список известных расширений.187188Зарегистрированные расширения в нижнем регистре сопоставляются без учёта регистра.189190Если *strict* равно `True` (значение по умолчанию), соответствие добавляется в официальные MIME-типы, иначе – в нестандартные.191192Устарело с версии 3.14: значения *ext*, не начинающиеся с `'.'`, устарели.193194Изменено в версии 3.16.0a0 (не выпущена): *ext* теперь должен начинаться с `'.'`. В противном случае возникает [`ValueError`](https://python-all.ru/3.16/library/exceptions.html#ValueError).195196## Использование командной строки197198Модуль `mimetypes` можно запускать как скрипт из командной строки.199200```sh201python -m mimetypes [-h] [-e] [-l] type [type ...]202```203204Принимаются следующие опции:205206#### `-h`207208#### `--help`209210Показать справку и выйти.211212#### `-e`213214#### `--extension`215216Определяет расширение вместо типа.217218#### `-l`219220#### `--lenient`221222Дополнительно выполняется поиск некоторых распространённых, но нестандартных типов.223224По умолчанию скрипт преобразует MIME-типы в расширения файлов. Однако если указан `--extension`, он преобразует расширения файлов в MIME-типы.225226Для каждой записи `type` скрипт выводит строку в стандартный поток вывода. При обнаружении неизвестного типа он выводит сообщение об ошибке в стандартный поток вывода и завершается с кодом возврата `1`.227228## Пример командной строки229230Ниже приведены несколько примеров типичного использования интерфейса командной строки `mimetypes`:231232```console233$ # Получить MIME-тип по имени файла234$ python -m mimetypes filename.png235type: image/png encoding: None236237$ # Получить MIME-тип по URL238$ python -m mimetypes https://example.com/filename.txt239type: text/plain encoding: None240241$ # Получить составной MIME-тип242$ python -m mimetypes filename.tar.gz243type: application/x-tar encoding: gzip244245$ # Получить MIME-тип для редкого расширения файла246$ python -m mimetypes filename.pict247error: media type unknown for filename.pict248249$ # Теперь ищем в расширенной встроенной базе Python250$ python -m mimetypes --lenient filename.pict251type: image/pict encoding: None252253$ # Получить расширение файла по MIME-типу254$ python -m mimetypes --extension text/javascript255.js256257$ # Получить расширение файла по редкому MIME-типу258$ python -m mimetypes --extension text/xul259error: unknown type text/xul260261$ # Теперь снова ищем в расширенной базе данных262$ python -m mimetypes --extension --lenient text/xul263.xul264265$ # попробовать передать неизвестное расширение файла266$ python -m mimetypes filename.sh filename.nc filename.xxx filename.txt267type: application/x-sh encoding: None268type: application/x-netcdf encoding: None269error: media type unknown for filename.xxx270type: text/plain encoding: None271272$ # попробовать передать неизвестный MIME-тип273$ python -m mimetypes --extension audio/aac audio/opus audio/future audio/x-wav274.aac275.opus276error: unknown type audio/future277```278