Pythonのmimetypesでファイルの種類を自動判別!


 

この記事では、Pythonの標準ライブラリmimetypesを使って、ファイル名(特に拡張子)からそのMIMEタイプを推定する方法について解説します。ウェブアプリケーションでのファイルアップロード処理や、ファイルの種類に応じた処理の振り分けなど、MIMEタイプの推定は多くの場面で役立ちます。


 

MIMEタイプとは?

 

MIMEタイプ (Multipurpose Internet Mail Extensions Type) とは、インターネット上でやり取りされる様々なデータの種類を示す識別子です。例えば、画像ファイルであればimage/jpegimage/png、テキストファイルであればtext/plain、HTMLファイルであればtext/htmlのように記述されます。これにより、ブラウザやアプリケーションは受け取ったデータがどのような種類のものであるかを認識し、適切に処理できます。

 

なぜMIMEタイプを推定するのか?

 

  • セキュリティ: アップロードされたファイルが予期しない種類でないかを確認し、悪意のあるファイルの実行を防ぎます。

  • 適切な処理: ウェブサーバーが正しいContent-Typeヘッダーを設定し、ブラウザがファイルを適切に表示・処理できるようにします。

  • ファイルの種類判定: プログラム内でファイルの種類に応じて異なる処理を行いたい場合に利用します。


 

mimetypesとは?

 

mimetypesは、Pythonに標準で組み込まれているライブラリで、ファイル名や拡張子に基づいてMIMEタイプを推定する機能を提供します。特別なインストールは不要で、すぐに利用できます。OSのMIMEタイプ設定や、独自のMIMEタイプマップを考慮して推定を行うことができます。

 

mimetypesの基本的な使い方

 

mimetypesを使ってファイル名からMIMEタイプを推定する基本的な手順を説明します。


 

ファイル名からMIMEタイプを推定する

 

mimetypes.guess_type()関数にファイル名を渡すだけで、そのMIMEタイプとエンコーディングを推定できます。

Python
 
import mimetypes

# ファイル名からMIMEタイプを推定
mime_type, encoding = mimetypes.guess_type("example.png")
print(f"example.png のMIMEタイプ: {mime_type}") # -> image/png

mime_type, encoding = mimetypes.guess_type("document.pdf")
print(f"document.pdf のMIMEタイプ: {mime_type}") # -> application/pdf

mime_type, encoding = mimetypes.guess_type("script.js")
print(f"script.js のMIMEタイプ: {mime_type}") # -> text/javascript

guess_type()関数は2つの値を返します。1つ目が推定されたMIMEタイプ、2つ目がエンコーディング(圧縮形式など)です。通常、エンコーディングはNoneになることが多いです。

 

拡張子からMIMEタイプを推定する

 

ファイル名全体ではなく、拡張子だけからMIMEタイプを推定することもできます。

Python
 
import mimetypes

# 拡張子からMIMEタイプを推定
mime_type, _ = mimetypes.guess_type(".html")
print(f".html のMIMEタイプ: {mime_type}") # -> text/html

mime_type, _ = mimetypes.guess_type(".mp3")
print(f".mp3 のMIMEタイプ: {mime_type}") # -> audio/mpeg

拡張子から推定する場合も、ファイル名から推定する場合と同様に動作します。


 

その他の便利な機能

 

 

MIMEタイプから拡張子を取得する

 

逆に、MIMEタイプから適切な拡張子を取得することも可能です。

Python
 
import mimetypes

# MIMEタイプから拡張子を取得
extension = mimetypes.guess_extension("image/jpeg")
print(f"image/jpeg の拡張子: {extension}") # -> .jpeg

extension = mimetypes.guess_extension("text/plain")
print(f"text/plain の拡張子: {extension}") # -> .txt

 

独自のMIMEタイプを追加する

 

もしmimetypesが認識しないMIMEタイプを扱いたい場合は、mimetypes.add_type()を使って独自のMIMEタイプと拡張子のマッピングを追加できます。

Python
 
import mimetypes

# 独自のMIMEタイプを追加
mimetypes.add_type("application/x-my-custom-type", ".mct")

mime_type, _ = mimetypes.guess_type("my_file.mct")
print(f"my_file.mct のMIMEタイプ: {mime_type}") # -> application/x-my-custom-type

 

まとめ

 

Pythonのmimetypesライブラリは、ファイル名や拡張子からMIMEタイプを簡単に推定できる強力な標準ツールです。ファイルのアップロード処理、ダウンロード時のContent-Type設定、あるいは単にファイルの種類をプログラムで判別したい場合に非常に役立ちます。ぜひmimetypesを活用して、ファイルの取り扱いをよりスマートにしてみてください!

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座