Документация Python неофициальный перевод
Содержание страницы

mimetypes – сопоставление имён файлов с MIME-типамиmimetypes – Map filenames to MIME types

Исходный код: Lib/mimetypes.py


Модуль mimetypes преобразует имя файла или URL в MIME-тип, связанный с расширением файла. Предусмотрены преобразования из имени файла в MIME-тип и из MIME-типа в расширение файла; кодировки не поддерживаются для последнего преобразования.

Модуль предоставляет один класс и ряд вспомогательных функций. Функции – это основной интерфейс к модулю, но некоторые приложения могут заинтересоваться и классом.

Описанные ниже функции предоставляют основной интерфейс для этого модуля. Если модуль не был инициализирован, они вызовут init(), если полагаются на информацию, заданную с помощью init().

mimetypes.guess_type(url, strict=True)

Определяет тип файла по его имени, пути или URL, заданным url. URL может быть строкой или path-подобным объектом.

Возвращаемое значение – кортеж (type, encoding), где type равен None, если type не удалось определить (отсутствует или неизвестно расширение), или строка вида 'type/subtype', пригодная для использования в заголовке MIME content-type.

encoding равен None при отсутствии кодирования или имени программы, использованной для кодирования (например, compress или gzip). Кодировка подходит для использования в качестве заголовка Content-Encoding, не в качестве заголовка Content-Transfer-Encoding. Отображения управляются таблицами. Суффиксы кодировок чувствительны к регистру; суффиксы типов сначала проверяются с учётом регистра, затем без учёта.

Необязательный аргумент strict – это флаг, указывающий, ограничивается ли список известных MIME-типов только официальными типами, зарегистрированными в IANA. Однако поведение этого модуля также зависит от операционной системы. Могут быть идентифицированы только те типы файлов, которые распознаются ОС или явно зарегистрированы во внутренней базе данных Python. Когда strict равен True (значение по умолчанию), поддерживаются только типы IANA; когда strict равен False, распознаются также некоторые дополнительные нестандартные, но часто используемые MIME-типы.

Изменено в версии 3.8: Добавлена поддержка url в качестве path-подобного объекта.

Мягко устарело с версии 3.13: Передача пути к файлу вместо URL. Используйте для этого guess_file_type().

mimetypes.guess_file_type(path, *, strict=True)

Определяет тип файла по его пути, заданному path. Аналогично функции guess_type(), но принимает путь вместо URL. Путь может быть строкой, объектом bytes или path-подобным объектом.

Добавлено в версии 3.13.

mimetypes.guess_all_extensions(type, strict=True)

Определяет расширения для файла на основе его MIME-типа, заданного type. Возвращаемое значение – список строк, содержащий все возможные расширения файла, включая начальную точку ('.'). Расширения не гарантируют, что были связаны с каким-либо конкретным потоком данных, но будут сопоставлены с MIME-типом type функциями guess_type() и guess_file_type().

Необязательный аргумент strict имеет то же значение, что и в функции guess_type().

mimetypes.guess_extension(type, strict=True)

Определяет расширение для файла на основе его MIME-типа, заданного type. Возвращаемое значение – строка, содержащая расширение файла, включая начальную точку ('.'). Расширение не гарантирует, что было связано с каким-либо конкретным потоком данных, но будет сопоставлено с MIME-типом type функциями guess_type() и guess_file_type(). Если расширение не может быть определено для type, возвращается None.

Необязательный аргумент strict имеет то же значение, что и в функции guess_type().

Некоторые дополнительные функции и элементы данных доступны для управления поведением модуля.

mimetypes.init(files=None)

Инициализирует внутренние структуры данных. Если задан, files должен быть последовательностью имён файлов, которые следует использовать для дополнения карты типов по умолчанию. Если не указан, используемые имена файлов берутся из knownfiles; в Windows загружаются текущие настройки реестра. Каждый файл, указанный в files или knownfiles, имеет приоритет над указанными ранее. Допускается многократный вызов init().

Указание пустого списка для files предотвратит применение системных значений по умолчанию: будут присутствовать только известные значения из встроенного списка.

Если files равен None, внутренняя структура данных полностью перестраивается в исходное значение по умолчанию. Это стабильная операция и при многократном вызове будет выдавать одинаковые результаты.

Изменено в версии 3.2: Ранее настройки реестра 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

Флаг, указывающий, были ли инициализированы глобальные структуры данных. Устанавливается в True функцией init().

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'

Объекты MimeTypesMimeTypes objects

Класс MimeTypes может быть полезен приложениям, которым требуется более одной базы MIME‑типов; он предоставляет интерфейс, похожий на интерфейс модуля mimetypes.

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

Этот класс представляет базу MIME‑типов. По умолчанию он предоставляет доступ к той же базе, что и остальная часть модуля. Изначальная база – копия базы модуля, и её можно расширить, загружая в неё дополнительные файлы в стиле mime.types с помощью методов read() или readfp(). Словари отображений можно очистить перед загрузкой дополнительных данных, если данные по умолчанию не нужны.

С помощью необязательного параметра 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_file_type(path, *, strict=True)

Аналогично функции guess_file_type(), но используются таблицы, хранящиеся в составе объекта.

Добавлено в версии 3.13.

guess_all_extensions(type, strict=True)

Аналогично функции guess_all_extensions(), но с использованием таблиц, хранящихся как часть объекта.

read(filename, strict=True)

Загружает информацию MIME из файла с именем filename. Для разбора файла используется readfp().

Если strict равно True, информация добавляется в список стандартных типов, иначе – в список нестандартных.

readfp(fp, strict=True)

Загружает информацию о MIME-типах из открытого файла fp. Файл должен иметь формат стандартных файлов mime.types.

Если strict равно True, информация добавляется в список стандартных типов, иначе – в список нестандартных.

read_windows_registry(strict=True)

Загружает информацию о MIME-типах из реестра Windows.

Если strict равно True, информация добавляется в список стандартных типов, иначе – в список нестандартных.

Добавлено в версии 3.2.

add_type(type, ext, strict=True)

Добавляет соответствие между MIME-типом type и расширением ext. Допустимые расширения начинаются с точки «.» или пусты. Если расширение уже известно, новый тип заменяет старый. Если тип уже известен, расширение добавляется в список известных расширений.

Если strict равно True (значение по умолчанию), соответствие добавляется в официальные MIME-типы, иначе – в нестандартные.

Устарело с версии 3.14, будет удалено в версии 3.16: Недопустимые расширения без точки будут вызывать ValueError в Python 3.16.

Использование командной строкиCommand-line usage

Модуль mimetypes можно запускать как скрипт из командной строки.

python -m mimetypes [-h] [-e] [-l] type [type ...]

Принимаются следующие опции:

-h
--help

Показать справку и выйти.

-e
--extension

Определяет расширение вместо типа.

-l
--lenient

Дополнительно выполняется поиск некоторых распространённых, но нестандартных типов.

По умолчанию скрипт преобразует MIME-типы в расширения файлов. Однако если указан --extension, он преобразует расширения файлов в MIME-типы.

Для каждой записи type скрипт выводит строку в стандартный поток вывода. При обнаружении неизвестного типа он выводит сообщение об ошибке в стандартный поток вывода и завершается с кодом возврата 1.

Пример командной строкиCommand-line example

Ниже приведены несколько примеров типичного использования интерфейса командной строки mimetypes:

$ # Получить MIME-тип по имени файла
$ python -m mimetypes filename.png
type: image/png encoding: None

$ # Получить MIME-тип по URL
$ python -m mimetypes https://example.com/filename.txt
type: text/plain encoding: None

$ # Получить составной MIME-тип
$ python -m mimetypes filename.tar.gz
type: application/x-tar encoding: gzip

$ # Получить MIME-тип для редкого расширения файла
$ python -m mimetypes filename.pict
error: media type unknown for filename.pict

$ # Теперь ищем в расширенной встроенной базе Python
$ python -m mimetypes --lenient filename.pict
type: image/pict encoding: None

$ # Получить расширение файла по MIME-типу
$ python -m mimetypes --extension text/javascript
.js

$ # Получить расширение файла по редкому MIME-типу
$ python -m mimetypes --extension text/xul
error: unknown type text/xul

$ # Теперь снова ищем в расширенной базе данных
$ python -m mimetypes --extension --lenient text/xul
.xul

$ # попробовать передать неизвестное расширение файла
$ python -m mimetypes filename.sh filename.nc filename.xxx filename.txt
type: application/x-sh encoding: None
type: application/x-netcdf encoding: None
error: media type unknown for filename.xxx
type: text/plain encoding: None

$ # попробовать передать неизвестный MIME-тип
$ python -m mimetypes --extension audio/aac audio/opus audio/future audio/x-wav
.aac
.opus
error: unknown type audio/future