mimetypes --- ファイル名を MIME タイプへマップする

ソースコード: Lib/mimetypes.py


mimetypes モジュールは、ファイル名または URL と、ファイル拡張子に対応する MIME 型との間の変換を行います。 ファイル名から MIME 型への変換と、MIME 型からファイル拡張子への変換を提供します。 後者の変換では符号化方式はサポートしません。

このモジュールは、一つのクラスと多くの便利な関数を提供します。これらの関数がこのモジュールへの標準のインターフェースですが、アプリケーションによっては、そのクラスにも関係するかもしれません。

以下で説明されている関数は、このモジュールへの主要なインターフェースを提供します。たとえモジュールが初期化されていなくても、もしこれらの関数が、 init() がセットアップする情報に依存していれば、これらの関数は、 init() を呼びます。

mimetypes.guess_type(url, strict=True)

url で与えられるファイル名あるいは URL に基づいて、ファイルの型を推定します。URL は文字列または path-like object です。

戻り値は、タプル (type, encoding) です、ここで type は、もし型が(拡張子がないあるいは未定義のため)推定できない場合は、 None を、あるいは、 MIME content-type ヘッダ に利用できる、 'type/subtype' の形の文字列です。

encoding is None for no encoding or the name of the program used to encode (e.g. compress or gzip). The encoding is suitable for use as a Content-Encoding header, not as a Content-Transfer-Encoding header. The mappings are table driven. Encoding suffixes are case-sensitive. Suffix mappings and type suffixes are first tried case-sensitively, then case-insensitively.

オプションの strict 引数は、既知の MIME 型を IANA に登録された 正式な型だけに限定するかどうかを指定するフラグです。 ただし、このモジュールの動作は、使用しているオペレーティングシステムにも依存します。 OS が認識するファイル型か、Python 内部のデータベースに明示的に登録されたファイル型だけを識別できます。 strict が True (デフォルト) の場合は IANA の型だけをサポートします。 False の場合は、非標準ですが一般的に使われている MIME 型の一部も認識します。

バージョン 3.8 で変更: url に path-like object を指定できるようになりました。

バージョン 3.13 で ソフト非推奨 <Soft deprecated>: URL の代わりにファイルパスを渡すことは非推奨です。 ファイルパスには guess_file_type() を使ってください。

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

path で指定されたパスに基づき、ファイルの型を推定します。 guess_type() に似ていますが、URL ではなくパスを受け付けます。 パスには文字列、bytes オブジェクト、path-like object を指定できます。

Added in version 3.13.

mimetypes.guess_all_extensions(type, strict=True)

type で指定された MIME 型に基づき、ファイルの拡張子を推定します。 戻り値は、先頭のドット ('.') を含む、候補となるすべてのファイル拡張子の文字列リストです。 拡張子が特定のデータストリームに関連付けられていたことは保証されませんが、guess_type() と guess_file_type() に渡すと MIME 型 type に対応付けられます。

省略可能な strict 引数は guess_type() 関数のものと同じ意味を持ちます。

mimetypes.guess_extension(type, strict=True)

type で指定された MIME 型に基づき、ファイルの拡張子を推定します。 戻り値は、先頭のドット ('.') を含むファイル拡張子の文字列です。 拡張子が特定のデータストリームに関連付けられていたことは保証されませんが、guess_type() と guess_file_type() に渡すと MIME 型 type に対応付けられます。 type の拡張子を推定できなければ None を返します。

省略可能な strict 引数は guess_type() 関数のものと同じ意味を持ちます。

モジュールの動作を制御するために、いくつかの追加の関数とデータ項目が利用できます。

mimetypes.init(files=None)

内部のデータ構造を初期化します。もし files が与えられていれば、これはデフォルトの type map を増やすために使われる、一連のファイル名でなければなりません。もし省略されていれば、使われるファイル名は knownfiles から取られます。 Windows であれば、現在のレジストリの設定が読み込まれます。 files あるいは knownfiles 内の各ファイル名は、それ以前に現れる名前より優先されます。繰り返し init() を呼び出すことは許されています。

files に空リストを与えることで、システムのデフォルトが適用されるのを避けることが出来ます; 組み込みのリストから well-known な値だけが取り込まれます。

files が None の場合、内部のデータ構造は初期のデフォルト値に完全に再構築されます。 これは安定な操作であり、複数回呼び出されたときは同じ結果になります。

バージョン 3.2 で変更: 前のバージョンでは、 Windows のレジストリの設定は無視されていました。

mimetypes.read_mime_types(file)

file で指定された名前のファイルが存在する場合、そこから型マップを読み込みます。 file は読み込むファイル名を指定する文字列でなければなりません。 型マップは、先頭のドット ('.') を含むファイル拡張子から 'type/subtype' 形式の文字列へのマッピングである辞書として返されます。 ファイルが存在しないか読み取れない場合は None を返します。

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

Add a mapping from the MIME type type to the extension ext. When the extension is already known, the new type will replace the old one. When the type is already known the extension will be added to the list of known extensions. Valid extensions are empty or start with a '.'.

Registered lower-case extensions are matched case-insensitively.

strict が True の時(デフォルト)は、そのマッピングは正式な MIME 型に、そうでなければ、非標準の MIME 型に追加されます。

バージョン 3.14 で非推奨: ext values that do not start with '.' are deprecated.

バージョン 3.16 で変更: ext now must start with '.'. Otherwise ValueError is raised.

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'

MimeTypes オブジェクト

MimeTypes クラスは、複数の MIME 型データベースを必要とするアプリケーションに便利です。 mimetypes モジュールと似たインターフェースを提供します。

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

このクラスは MIME 型のデータベースを表します。 デフォルトでは、このモジュールの他の部分と同じデータベースにアクセスできます。 初期データベースは Python 組み込みの MIME 型テーブルから作成します。 read() や readfp() メソッドで、mime.types 形式のファイルを追加で読み込み、データベースを拡張できます。 デフォルトのデータが不要な場合は、追加データを読み込む前にマッピングの辞書を空にすることもできます。

オプションの filenames 引数を使うと、デフォルトのデータベースに追加のファイルを読み込ませることができます。

suffix_map

拡張子から拡張子へのマッピングを持つ辞書です。 符号化方式と型を同じ拡張子で示す、符号化されたファイルを認識するために使います。 例えば .tgz は .tar.gz に対応付けられ、符号化方式と型を別々に認識できるようにします。 あらかじめ定められた値で初期化されます。

encodings_map

ファイル拡張子から符号化方式へのマッピングを持つ辞書です。 あらかじめ定められた値で初期化されます。

types_map

ファイル拡張子から MIME 型へのマッピングを持つ 2 つの辞書のタプルです。 最初の辞書は非標準の型、2 番目の辞書は標準の型を扱います。 あらかじめ定められた値と、filenames 引数で指定されたファイルから読み込んだ MIME 型情報で初期化されます。

types_map_inv

MIME 型からファイル拡張子のリストへのマッピングを持つ 2 つの辞書のタプルです。 最初の辞書は非標準の型、2 番目の辞書は標準の型を扱います。 あらかじめ定められた値と、filenames 引数で指定されたファイルから読み込んだ MIME 型情報で初期化されます。

guess_extension(type, strict=True)

guess_extension() 関数と同様ですが、オブジェクトに保存されたテーブルを使用します。

guess_type(url, strict=True)

guess_type() 関数と同様ですが、オブジェクトに保存されたテーブルを使用します。

guess_file_type(path, *, strict=True)

guess_file_type() 関数に似ていますが、オブジェクト内に保存されたテーブルを使います。

Added in version 3.13.

guess_all_extensions(type, strict=True)

guess_all_extensions() と同様ですが、オブジェクトに保存されたテーブルを参照します。

read(filename, strict=True)

MIME 情報を、 filename という名のファイルからロードします。これはファイルを解析するのに readfp() を使用します。

strict が True の時 (デフォルト) は、そのマッピングは標準 MIME 型のリストに、そうでなければ、非標準 MIME 型のリストに追加されます。

readfp(fp, strict=True)

MIME 型情報を、オープンしたファイル fp からロードします。ファイルは、標準の mime.types ファイルの形式でなければなりません。

strict が True の時 (デフォルト) は、そのマッピングは標準 MIME 型のリストに、そうでなければ、非標準 MIME 型のリストに追加されます。

read_windows_registry(strict=True)

MIME type 情報を Windows のレジストリから読み込みます。

strict が True の時 (デフォルト) は、そのマッピングは標準 MIME 型のリストに、そうでなければ、非標準 MIME 型のリストに追加されます。

Added in version 3.2.

add_type(type, ext, strict=True)

MIME 型 type から拡張子 ext へのマッピングを追加します。 有効な拡張子は '.' で始まるか、空文字列です。 拡張子がすでに登録されている場合、新しい型が古い型を置き換えます。 型がすでに登録されている場合は、その型の既知の拡張子のリストに追加します。

Registered lower-case extensions are matched case-insensitively.

strict が True の時(デフォルト)は、そのマッピングは正式な MIME 型に、そうでなければ、非標準の MIME 型に追加されます。

バージョン 3.14 で非推奨: ext values that do not start with '.' are deprecated.

バージョン 3.16 で変更: ext now must start with '.'. Otherwise ValueError is raised.

コマンドラインでの使用

mimetypes モジュールは、コマンドラインからスクリプトとして実行できます。

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

以下のオプションが使用できます:

-h
--help

ヘルプメッセージを表示して終了します。

-e
--extension

型の代わりに拡張子を推定します。

-l
--lenient

非標準ですが一般的に使われている型も検索します。

By default the script converts MIME types to file extensions. However, if --extension is specified, it converts file extensions to MIME types.

スクリプトは各 type について、標準出力ストリームに 1 行を書き出します。 不明な型があれば、標準出力ストリームにエラーメッセージを書き出し、終了コード 1 で終了します。

コマンドラインの例

mimetypes のコマンドラインインターフェースの一般的な使用例を示します。

$ # get a MIME type by a file name
$ python -m mimetypes filename.png
type: image/png encoding: None

$ # get a MIME type by a URL
$ python -m mimetypes https://example.com/filename.txt
type: text/plain encoding: None

$ # get a complex MIME type
$ python -m mimetypes filename.tar.gz
type: application/x-tar encoding: gzip

$ # get a MIME type for a rare file extension
$ python -m mimetypes filename.pict
error: media type unknown for filename.pict

$ # now look in the extended database built into Python
$ python -m mimetypes --lenient filename.pict
type: image/pict encoding: None

$ # get a file extension by a MIME type
$ python -m mimetypes --extension text/javascript
.js

$ # get a file extension by a rare MIME type
$ python -m mimetypes --extension text/xul
error: unknown type text/xul

$ # now look in the extended database again
$ python -m mimetypes --extension --lenient text/xul
.xul

$ # try to feed an unknown file extension
$ 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

$ # try to feed an unknown MIME type
$ python -m mimetypes --extension audio/aac audio/opus audio/future audio/x-wav
.aac
.opus
error: unknown type audio/future