※このブログではサーバー運用、技術の検証等の費用のため広告をいれています。
記事が見づらいなどの問題がありましたらContactからお知らせください。


pythonでファイルのメディアタイプを取得する方法解説

python

投稿日:2019年9月4日

このエントリーをはてなブックマークに追加
メディアタイプはコンテンツがどのような種類のデータであるかを伝えるためのもので、Content-TypeやMIMEとも呼ばれます。 この記事ではpythonのビルトインのライブラリmimetypesで自動でローカルのファイルのMIMEタイプを自動で取得する方法を解説します。

はじめに

この記事について

この記事ではpythonでファイルのメディアタイプを自動で取得する方法について解説します。

メディアタイプとは

メディアタイプ(Media Type)またはインターネットメディアタイプ(Internet Media Type)とはそのコンテンツがどのような種類のデータであるかを伝えるためのものです。

メディアタイプとContent-Typeの違い

よく混同される2つであるが、HTTPのヘッダにそのコンテンツのメディアタイプを記述するフィールドがContent-Typeです。例えばHTTPでJavascriptファイルをうけとるときResponseのヘッダーには次のようなContent-Typeフィールドが記述されます。

content-type: text/javascript; charset=utf-8

実践

環境

使用する環境は以下のとおりです。

  • OS:Ubuntu18.04LTS
  • 言語:python3.7.3

今回使用するのはビルトインのライブラリmimetypesです。

mimetypesの使い方基礎

一番シンプルな使い方は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の使い方サンプル

mimetypesの使い方のサンプルとしてルートディレクトリ以下のすべてのファイルのメディアタイプを推測してカウントをするプログラムをおいておきます。良ければ参考にしてください。

media_type_count_sample.py
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内のファイルのメディアタイプを確認

まずは自分のPCに保存してあるファイルのメディアタイプを見てみます。メディアタイプを確認するには確認したいファイルを右クリックしてプロパティを確認するとContent-TypeMIME、または種類というフィールド
で表示されると思います。データの形式は`タイプ/サブタイプ`の形式になっています。

下の画像はあるJPEG画像のプロパティです。

青く囲った部分がメディアタイプです。このファイルのメディアタイプはimage/jpegであることがわかります。

ブラウザでメディアタイプを確認

ここではブラウザで受け取るデータのメディアタイプを確認してみます。ブラウザはChromeを使います。メディアタイプ確認の手順は以下のとおりです。

  1. 任意のサイトを開く
  2. 開発者ツールを開く(Ctrl+Shift+I キー(Windows)または Cmd+Opt+I キー(Mac))
  3. Networkタブを開く
  4. ブラウザの更新(Ctrl+R キー(Windows)または Cmd+R キー(Mac))でサイトのデータを再度取得する
  5. 任意のファイルをクリックする
  6. Headersタブを開く
  7. Response Headersの中のContent-Typeがメディアタイプです

下の画像はあるJPEG画像のプロパティです。

青く囲った部分がメディアタイプです。このファイルのメディアタイプはtext/htmlであることがわかります。

このエントリーをはてなブックマークに追加


関連記事

記事へのコメント
1:invoits
2020年12月10日4:14

Propecia Dermatologist Approved Toupsboush <a href=https://xbuycheapcialiss.com/>purchase cialis</a> Whermeni comprar viagra madrid

2:invoits
2021年3月28日7:25

http://ponlinecialisk.com/ - cialis no prescription

3:alprostadil injection site
2021年4月3日20:23

alprostadil cream reviews https://alprostadildrugs.com/ administration of topical alprostadil

4:order tadalafil
2021年4月4日3:06

tadalafil pills https://elitadalafill.com/ order tadalafil

5:Poeshosse
2021年5月26日12:42

<a href=https://fcialisj.com/>cialis for daily use

6:tadalafil 30 mg
2021年5月28日9:24

v tada super https://tadalisxs.com/ tadalis-ajanta reviews

7:cialis tablets
2021年6月4日8:29

taldenafil <a href="https://elitadalafill.com/">cialis pills</a> tadalafil cost

8:chloroquine cancer
2021年6月9日0:04

what is hydroxychlor 200 mg <a href="https://hydroxychloroquinex.com/#">buy chloroquine online</a> hcq medical abbreviation

9:Poeshosse
2021年6月12日18:36

<a href=https://vsnolvadexv.com>where can i buy nolvadex pct

10:Poeshosse
2021年6月25日9:38

<a href=http://priligyset.com>dapoxetine on line

11:www.pharmaceptica.com
2021年6月29日13:42

cialis tadalafil https://www.pharmaceptica.com/

12:Poeshosse
2021年7月7日4:53

<a href=http://fcialisj.com/>where to buy cialis cheap</a>

13:Poeshosse
2021年7月20日4:16

<a href=https://vsamoxilv.com/></a>

14:Poeshosse
2021年8月5日18:33

<a href=https://cialiswwshop.com/>cialis online prescription</a>

15:cialis tablets
2021年8月25日21:25

<a href="https://cialiswithdapoxetine.com/#">cialis generic</a> cheap cialis