投稿日:2019年9月4日
メディアタイプはコンテンツがどのような種類のデータであるかを伝えるためのもので、Content-TypeやMIMEとも呼ばれます。 この記事ではpythonのビルトインのライブラリmimetypesで自動でローカルのファイルのMIMEタイプを自動で取得する方法を解説します。
この記事ではpythonでファイルのメディアタイプを自動で取得する方法について解説します。
メディアタイプ(Media Type)またはインターネットメディアタイプ(Internet Media Type)とはそのコンテンツがどのような種類のデータであるかを伝えるためのものです。
よく混同される2つであるが、HTTPのヘッダにそのコンテンツのメディアタイプを記述するフィールドがContent-Typeです。例えばHTTPでJavascriptファイルをうけとるときResponseのヘッダーには次のようなContent-Typeフィールドが記述されます。
content-type: text/javascript; charset=utf-8
一番シンプルな使い方はguess_type(url, strict=True)メソッドでファイルパスの拡張子からメディアタイプを推測する使い方です。url引数には対象のファイルパス(ファイルが実際に存在する必要はない)を渡します。推測できない拡張子を持ったファイルパスを渡した場合にはNoneが返されます。
>>> import mimetypes
>>> mimetypes.guess_type("/someone/sample.docx")
('application/vnd.openxmlformats-officedocument.wordprocessingml.document', None)
>>> mimetypes.guess_type("/example/sample.jpg")
('image/jpeg', None)
>>> mimetypes.guess_type("/sample/file/test.aaa") # 存在しない拡張子
(None, None)
>>> mimetypes.guess_type("/examle/file/sample.tar.gz") # 符号化されたデータ
('application/x-tar', 'gzip')
guess_all_extensions(type, strict=True)メソッドをつかうと、MIME型から対応するファイルの拡張子一覧をリストで受け取ることができます。
さらにこのメソッドの簡易版のようなメソッドがguess_extension(type, strict=True)で、これは対応する拡張子をひとつだけ受け取ることができます。
>>> import mimetypes
>>> mimetypes.guess_all_extensions("image/jpeg")
['.jpe', '.jpeg', '.jpg']
>>> mimetypes.guess_extension("image/jpeg")
'.jpe'
mimetypesの使い方のサンプルとしてルートディレクトリ以下のすべてのファイルのメディアタイプを推測してカウントをするプログラムをおいておきます。良ければ参考にしてください。
import os, mimetypes
# mimeタイプを格納する辞書を定義
mime_type_dict = dict()
# ルート以下をすべて探索
for root, dirs, files in os.walk("./"):
for file in files:
# メディアタイプを推測
mime_type_str = mimetypes.guess_type(file)[0]
# メディアタイプをカウント
if mime_type_str in mime_type_dict:
mime_type_dict[mime_type_str] += 1
else:
mime_type_dict[mime_type_str] =1
# カウントを表示
print(mime_type_dict)
ここでは手動でメディアタイプを確認する方法について先に解説します。自分のスクリプトが正しく作成できたか確認する際の手がかりにしてください。
まずは自分のPCに保存してあるファイルのメディアタイプを見てみます。メディアタイプを確認するには確認したいファイルを右クリックしてプロパティを確認するとContent-TypeやMIME、または種類というフィールド
で表示されると思います。データの形式は`タイプ/サブタイプ`の形式になっています。
下の画像はあるJPEG画像のプロパティです。
青く囲った部分がメディアタイプです。このファイルのメディアタイプはimage/jpegであることがわかります。
ここではブラウザで受け取るデータのメディアタイプを確認してみます。ブラウザはChromeを使います。メディアタイプ確認の手順は以下のとおりです。
下の画像はあるJPEG画像のプロパティです。
青く囲った部分がメディアタイプです。このファイルのメディアタイプはtext/htmlであることがわかります。