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

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

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

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

`guess_type`( | filename[, strict])

  filename で与えられるファイル名あるいは 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 型も認識されます。

`guess_all_extensions`( | type[, strict])

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

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

`guess_extension`( | type[, strict])

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

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

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

`init`( | [files])

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

`read_mime_types`( | filename)

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

`add_type`( | type, ext[, strict])

  mime型 type からのマッピングを拡張子 ext に追加します。 拡張子がすでに既知であれば、新しい型が古いものに置き替わります。 その型がすでに既知であれば、その拡張子が、既知の拡張子のリストに追加されます。

  strictがある時は、そのマッピングは正式なMIME型に、 そうでなければ、非標準のMIME型に追加されます。

`inited`
  グローバルなデータ構造が初期化されているかどうかを示すフラグ。 これは `init()` により true に設定されます。

`knownfiles`
  共通にインストールされた型マップファイル名のリスト。これらの ファイルは、普通 mime.typesという名前であり、パッケージごとに 異なる場所にインストールされます。

`suffix_map`
  サフィックスをサフィックスにマップする辞書。これは、符号化方式と 型が同一拡張子で示される符号化ファイルが認識できるように 使用されます。例えば、.tgz 拡張子は、符号化と型が別個に 認識できるように .tar.gzにマップされます。

`encodings_map`
  ファイル名拡張子を符号化方式型にマッピングする辞書

`types_map`
  ファイル名拡張子をMIME型にマップする辞書

`common_types`
  ファイル名拡張子を非標準ではあるが、一般に使われているMIME型に マップする辞書

`MimeTypes` クラスは、1つ以上のMIME-型 データベースを 必要とするアプリケーションに役に立つでしょう。

クラス `MimeTypes`( | [filenames])

  このクラスは、MIME-型データベースを表現します。デフォールトでは、 このモジュールの他のものと同じデータベースへのアクセスを提供します。 初期データベースは、このモジュールによって提供されるもののコピーで、 追加の mime.types-形式のファイルを、`read()` あるいは `readfp()` メソッドを使って、データベースにロードすることで拡張されます。 マッピング辞書も、もしデフォールトのデータが望むものでなければ、 追加のデータをロードする前にクリアされます。

  省略可能な filenamesパラメータは、追加のファイルを、デフォールト データベースの"トップに"ロードさせるのに使うことができます。

  バージョン 2.2 で 新たに追加 された仕様です。

モジュールの使用例:

    >>> 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'