MIME タイプと拡張子

Posted on Wed 06 February 2019 in misc

Markdown ファイルから HTML ファイルをつくるスクリプトを書いています。あまり入力のチェックはしていませんが、さすがに HTML が入力されたときには弾くようにしています。ソースに上書きされてはまずいので。

ファイルの拡張子が .html であれば処理を行わないというようにしています。拡張子を得るのは、 os.path モジュールを使えば簡単です。ですが、拡張子で区別するよりうまいやり方がないかと思って調べてみました。

ひとつ見つけたのは、 mimetypes でしたが、このモジュールは拡張子から MIME タイプを、反対に MIME タイプから拡張子を得るものでした。

もう少し調べてみると MIME タイプはもともと電子メールでテキスト以外のファイルを扱うためにつくったもので、それが HTTP などにも転用されるようになり、Web でファイルを自動的に処理するためのものです。一方で、拡張子は Windows がファイルを判別して処理するためのものです。UNIX 系の OS ではもともとは、人間が区別するために慣習的に付けてはいましたが、OS にとっては意味のないものです。

残念ながら、ファイルの中身を調べずに判別するには拡張子か MIME タイプのどちらかのようです。今回はソースの上書きを防ぐだけのことですから、拡張子を見れば充分かなということで、そのままです。