[Python] テキストファイルの読み込みでエラーが出る場合の対応

Python
この記事は約5分で読めます。
エラーメッセージで混乱している男性
エラーメッセージで混乱している男性

Pythonでたったの3行でテキストファイルを読み込ませられるという記事を読んだからその通りにやってみたんだけど、UnicodeDecodeError とかいうエラーメッセージが出て終了しちゃうんだけど、、

今日は珍しく余裕なモグラ
今日は珍しく余裕なモグラ

これは全角文字を含むテキストファイルを読み込ませる時に、Pythonが想定していない文字コードのテキストファイルを読み込ませた時に発生するエラーです。Windowsでは、何も指定しない場合”Shift_JIS”の文字コードが想定されます。

Pythonでたった3行でテキストファイルを読み込ませる記事は、以下となります。

本記事に記載のPythonスクリプト動作確認環境

OS : Windows10(64bit版)
Python version : 3.7.3

スポンサーリンク

Pythonで扱う文字コードの種類

日本語の処理で扱う日本語の文字コードを、表にまとめます。

文字コード名Pythonエンコーディング名文字コード説明
UTF-8utf_8日本語以外にも対応の文字コード。最近の主流。
Shift_JISshift_jis主にWindowsで使用される日本語文字コード。
ASCIIascii半角英数字と記号を扱う。
日本語EUCeuc_jp主にUnix/Linuxで使用される日本語文字コード。
JISiso2022_jp日本語文字コードの1つ。

UnicodeDecodeErrorが発生した場合は、ファイルの文字コードを調べてから、Pythonのエンコーディング名を引数に添えて、ファイルを読み込む事となります。

テキストファイルの文字コードの調べ方

プラットフォーム毎に簡単に示します。
エディタをインストールするのが手間でなければ、クロスプラットフォームのエディタであるAtomをインストールして確認しても良いかもしれません。

Windowsでの文字コードの調べ方

任意のテキストエディタで開いて確認するのが一番手っ取り早いかと思います。エディタウインドウの右下に、文字コードを表示する物が多いです。Windows標準のメモ帳でも良いですが、フリーのサクラエディタでは、日本語EUCなど、より多くの文字コードに対応しているのでおススメです。

あと上記の画像の通り、メモ帳では Shift_JIS がANSIと表示されるので、直感的ではないですが、判別する事は可能です。

Mac/Linuxでの文字コードの調べ方

ターミナルのコマンドラインで、file –mime <ファイル名> と打ち込みます。
帰ってくる結果と文字コードの対応を、簡単な表でまとめます。

Macでのコマンド実行結果文字コード名
SampleTextUTF8.csv: text/plain; charset=utf-8UTF-8
SampleTextSJIS.csv: text/plain; charset=unknown-8bitShift_JIS
SampleTextEUC.csv: text/plain; charset=iso-8859-1日本語EUC

 Linuxの場合、”text/” 以降のコメントが若干違うかもですが、 ”charset=” 以降の文字列から、文字コードは読み取れるかなと思います。

調べた文字コードをPythonのOPEN関数へ入力する

ファイルオブジェクトを生成するOPEN関数の2つ目の引数に、調べた文字コードに対応するエンコーディング名を、PyhtonのOPEN関数へ入力します。

具体的には
 ファイルオブジェクト = OPEN( ファイル名(パス含む), encoding=エンコーディング名);
となります。

加えて実際の各種文字コードのテキストファイルと、それらテキストファイルを読み込むサンプルソースコードを示します。異なるのは、1行目の読み込んでいるファイルとエンコーディング名のみです。 

Pythonで文字コードUTF-8のファイルを読み込むソースコード

Pythonソースコード(コピペでご使用ください)
f = open(r"C:\Python_source\01_TextFileRead\SampleTextUTF8.csv",encoding="utf_8")
for line in f:<br>
    print (line,end="")

Pythonで文字コード日本語EUCのファイルを読み込むソースコード

Pythonソースコード(コピペでご使用ください)
f = open(r"C:\Python_source\01_TextFileRead\SampleTextEUC.csv",encoding="euc_jp")
for line in f:<br>
    print (line,end="")

Pythonで文字コードShift_JIS のファイルを読み込むソースコード

Pythonソースコード(コピペでご使用ください)
f = open(r"C:\Python_source\01_TextFileRead\SampleTextSJIS.csv",encoding="shift_jis")
for line in f:<br>
    print (line,end="")

まとめ

以下のと合わせて読んで頂ければ、テキストファイルが読み込めなくて途方に暮れる事はないかと思います。

テキストファイルを読み込んだ後は、テキストデータに色々な加工を施した後にファイル出力、または標準出力を行う事になるかと思います。その辺についてはまた近日中に記事にしたいと思います。最後まで読んで頂き、ありがとうございました。

タイトルとURLをコピーしました