目的
Python から CSV ファイルを読み込むとしたら下記のエラーが発生しました。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/anaconda3/lib/python3.6/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8e in position 0: invalid start byte
このエラーの解決していきたいと思います。
ファイルを utf-8 で読み込むようにする
import csv
with open('data.csv', 'r', encoding="utf_8") as file:
reader = csv.reader(file)
for row in reader:
print(row)
※ data.csv は自分が読み込みたいファイルに変更してください。
しかし、エラーが発生しました。
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
File "/anaconda3/lib/python3.6/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8e in position 0: invalid start byte
ファイルを utf-8 に変換する
ここで nkf 「Network Kanji Filter」を使い文字コードを変換します。
まず nkf コマンドをインストールします。
(すでにインストールしている人はスキップしてください)
$ brew install nkf
文字コードを変換していきます。
# 現在の文字コードの確認
$ nkf -g hogehoge.csv
Shift_JIS
# 文字コードを UTF-8 に変換します
$ nkf -w --overwrite hogehoge.csv
# 変更後の文字コードの確認
$ nkf -g hogehoge.csv
UTF-8
文字コードが変わったあと、下記のコードを実行すると読み込むことができました。
import csv
f = open('hogehoge.csv', 'r')
dataReader = csv.reader(f)
for row in dataReader:
print(row)
f.close()