# 19.5. `mimetypes` --- ファイル名を MIME 型へマップする

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

`mimetypes` モジュールは、ファイル名あるいは URL と、ファイル名拡張子に関連付けられた MIME 型とを変換します。ファイル名から MIME 型へと、 MIME 型からファイル名拡張子への変換が提供されます; 後者の変換では符号化方式はサポートされていません。

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

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

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

  url で与えられるファイル名あるいは URL に基づいて、ファイルの型を推定します。戻り値は、タプル `(type, encoding)` です、ここで type は、もし型が(拡張子がないあるいは未定義のため)推定できない場合は、 `None` を、あるいは、 MIME content-type ヘッダ に利用できる、 `'type/subtype'` の形の文字列です。

  encoding は、符合化方式がない場合は `None` を、あるいは、符号化に使われるプログラムの名前 (たとえば、 compress あるいは gzip)です。符号化方式は Content-Encoding ヘッダとして使うのに適しており、 Content-Transfer-Encoding ヘッダには適して いません 。マッピングはテーブル駆動です。符号化方式のサフィックスは大/小文字を区別します; データ型サフィックスは、最初大/小文字を区別して試し、それから大/小文字を区別せずに試します。

  省略可能な strict 引数は、既知の MIME 型のリストとして認識されるものが、IANAに登録された 正式な型のみに限定されるかどうかを指定するフラグです。strict が `True` (デフォルト)の時は、IANA 型のみがサポートされます; strict が `False` のときは、いくつかの追加の、非標準ではあるが、一般的に使用される MIME 型も認識されます。

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

  type で与えられる MIME 型に基づいてファイルの拡張子を推定します。戻り値は、先頭のドット (`'.'`)を含む、可能なファイル拡張子すべてを与える文字列のリストです。拡張子と特別なデータストリームとの関連付けは保証されませんが、 `guess_type()` によって MIME 型 type とマップされます。

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

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

  type で与えられる MIME 型に基づいてファイルの拡張子を推定します。戻り値は、先頭のドット (`'.'`)を含む、ファイル拡張子を与える文字列のリストです。拡張子と特別なデータストリームとの関連付けは保証されませんが、 `guess_type()` によって MIME 型 type とマップされます。もし type に対して拡張子が推定できない場合は、 `None` が返されます。

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

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

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

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

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

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

`mimetypes.``read_mime_types`(filename)

  ファイル filename で与えられた型のマップが、もしあればロードします。型のマップは、先頭の dot (`'.'`) を含むファイル名拡張子を、`'type/subtype'` の形の文字列にマッピングする辞書として返されます。もしファイル filename が存在しないか、読み込めなければ、`None` が返されます。

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

  MIME 型 type からのマッピングを拡張子 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`

  ファイル名拡張子を非標準ではあるが、一般に使われている 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'

## 19.5.1. Mime 型オブジェクト

`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 型にマッピングする 2 種類の辞書のタプル; 最初の辞書は非標準型、二つ目は標準型の辞書です。初期状態ではそれぞれ `common_types` と `types_map` です。

  `types_map_inv`

    MIME 型をファイル名拡張子のリストにマッピングする 2 種類の辞書のタプル; 最初の辞書は非標準型、二つ目は標準型の辞書です。初期状態ではそれぞれ `common_types` と `types_map` です。

  `guess_extension`(type, strict=True)

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

  `guess_type`(url, strict=True)

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

  `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 のレジストリから読み込みます。Windows でのみ利用できます。

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

    バージョン 3.2 で追加.