【Python】テキストファイルの文字コードを判別してファイルを開く

Python
この記事は約3分で読めます。

Pythonのopenで使用するencodingはプラットフォームに依存します。
Windowsであればcp932です。

Windows上のPythonでUTF-8で保存されたテキストファイルを
openのencoding引数に何もつけずに開くとエラーが発生します。

テキストファイルを開く前に文字コードを判別してから
適切なencoding引数で開くようにしてみます。

chardetを使用して文字コードを判別する

chardetを使用して、文字コードを判別します。

chardet
Universal encoding detector for Python 3

 

pipまたはcondaを使用してchardetをインストールします。

または

 

UTF-8とShift-JISの文字コードのテキストファイルを用意して、
それぞれ下記の内容でファイルを保存しました。

このテキストファイルをchardetのdetectメソッドを使用して
テキストファイルの文字コードを判別してみます。

detectメソッドの引数にはbytesまたはbytearrayを渡す必要があります。
openでファイルを開くときにmodeの引数にrbを指定し
バイナリモードで読み込んだファイルをdetectの引数として使用します。

 

ファイルの文字コード、文字コードの確度、ファイルに書かれている言語を表示してくれます。

UTF-8のファイルは判別できていますが、Shift-JISのファイルは間違った文字コードとして
判別しています。

bytesの内容から判別を行っているようですが
bytesの元となるテキストファイルの内容によっては、うまく判別できないようです。

青空文庫(夏目漱石の「こころ」)のファイルを利用してテストしてみたところ
正常にUTF-8とShift-JISと判別できました。

 

文字コードを判別してからテキストファイルを開く

chardetのマニュアルに複数のファイルの文字コードを判別する方法が掲載されています。
こちらのコードを応用して、事前に文字コードを判別してから
テキストファイルを開いてみます。

コードを動かすとカレントフォルダ内のテキストファイルの文字コードを判別してから
テキストファイルを開きます。

開いたファイルの名前と、ファイルの内容の1行目を表示します。

 

chardetは非常に便利ですが、ファイルの内容によっては
文字コードを誤認識する可能性があります。

文字コードの確度が低い場合は、手動で文字コードを指定してから
ファイルを読み込む必要がでてきます。

コメント