Pythonコードを書いている際にプログラムを実行すると「UnicodeDecodeError」が発生しました。
このようなエラーが発生する人は結構いるはず。
今回は、このエラーの対処法についてまとめました。
「UnicodeDecodeError: 」エラーが発生した際の対処法まとめ
今回は以下のようなプログラムをPythonで作成しました。
プログラムの内容は、取得したデータ「file.csv」の中身のデータを置換修正し、その後、そのCSVファイルを読み込み、データをエクセルへ出力するプログラムとなります。
import pandas as pd import re with open('file.csv', 'r', newline='') as file, \ open('file_out.csv', 'w', newline='') as fileout: text = re.sub(r'\s* ', ',', file.read()) print(text, file = fileout) print('置換完了') # CSVファイルの読み込み data = pd.read_csv('file_out.csv') # Excel形式で出力 data.to_excel('excel-data.xlsx', encoding='utf-8') print('CSV > Excel変換完了')
「UnicodeDecodeError: 」エラー内容
上記のプログラムを実行すると「UnicodeDecodeError:」が発生しました。
File "pandas/_libs/parsers.pyx", line 881, in pandas._libs.parsers.TextReader.read File "pandas/_libs/parsers.pyx", line 896, in pandas._libs.parsers.TextReader._read_low_memory File "pandas/_libs/parsers.pyx", line 973, in pandas._libs.parsers.TextReader._read_rows File "pandas/_libs/parsers.pyx", line 1105, in pandas._libs.parsers.TextReader._convert_column_data File "pandas/_libs/parsers.pyx", line 1158, in pandas._libs.parsers.TextReader._convert_tokens File "pandas/_libs/parsers.pyx", line 1281, in pandas._libs.parsers.TextReader._convert_with_dtype File "pandas/_libs/parsers.pyx", line 1297, in pandas._libs.parsers.TextReader._string_convert File "pandas/_libs/parsers.pyx", line 1520, in pandas._libs.parsers._string_box_utf8 UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 0: invalid start byte
このエラーは、’utf-8′ にデコードできないといわれ、実行が失敗しています。
原因としては、CSVファイルの読み込みが失敗しているようでした。
CSVファイルの読み込み時にエンコーディングを追加
うまくCSVが読み込めないところが原因となっているので、CSVファイルの読み込みは、「encoding=”shift-jis”」が必要になります。
以下は、csvファイルの読み込み時にエンコーディングの指定コードを追加しました。
data = pd.read_csv('file_out.csv', encoding='shift-jis')
また、以下でも問題ないです。
data = pd.read_csv(‘file_out.csv’, encoding='cp932′)
このcp932は、MicrosoftがShift-jisを独自に拡張した文字コードとなります。
今回はこちらを使用しています。
このコードを使用すると、「Shift-jis」で書かれたプログラムをUTF−8に変換して処理をしてくれます。
なので今回のエラーに対しても最も適したコードになると思います。
CSV読み込み時にエンコードを追加したプログラム
修正したコードは以下となります。
import pandas as pd import re with open('file.csv', 'r', newline='') as file, \ open('file_out.csv', 'w', newline='') as fileout: text = re.sub(r'\s* ', ',', file.read()) print(text, file = fileout) print('置換完了') # CSVファイルの読み込み data = pd.read_csv(‘file_out.csv’, encoding='cp932′) # Excel形式で出力 data.to_excel('excel-data.xlsx', encoding='utf-8') print('CSV > Excel変換完了')
これでエラーは解消されました。
該当のエラーが発生した際は参考にしてください。
サーバーを構築するならVPSがおすすめです。
エンジニアのオンライン学習
ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。
おすすめオンライン教材 | |
自宅で学習ができるオンラインスクール | |
ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。
コメントを残す