LoginSignup
6
3

More than 3 years have passed since last update.

pythonでのcsvファイル読み書きの際の文字コード ~windows環境ver~

Last updated at Posted at 2020-03-01

本稿の投稿経緯

python初心者の私が、csvファイルの読み書きの際のエンコードにたまにエラーに躓くので、その内容のまとめをメモしたもの。同じく初心者向けの記事になります。なお、環境はwindows環境になります。

エラー

csvファイルの読み書きの際に、よく引っかかるエラーについて

書き込み時のエラー

エラー内容
UnicodeEncodeError: 'shift_jis' codec can't encode character '\u9ad9' in position 14: illegal multibyte sequence

shift-jisでエンコードできない文字があるよってことですね。ファイル書き込みの際にファイルの文字コードと書き込み文字の文字コードの不一致で発生します。

ちなみにコードの指定箇所はここなど。

コード例
with open(filepath, 'w', newline='', encoding='shift-jis') as f

読み込み時のエラー

エラー内容
UnicodeDecodeError: 'shift_jis' codec can't decode byte 0xee in position 0

shift-jisででコードできない文字があるよってことですね。ファイル読み込みの際にファイルの文字コードとファイルの読み込みで指定した文字コードの不一致で発生します。(もしくは、ファイルの読み込み時に指定した文字コードで読めない文字がファイルに書き込まれている。)

ちなみにコードの指定箇所はここなど。

コード例
data = pd.read_csv(filepath, encoding = 'shift-jis')

正しい文字コードの指定は?

ファイル作成、書き込み、読み込みの一連の動作をpython上でする場合は、以下の横軸通りに指定しておけば、エラーは発生しないはずです。
(ファイルの文字コードの意味は、書き込み時に指定した文字コードによって作成されるcsvの文字コードを表しています)

書き込み時の文字コード     ファイルの文字コード     読み込み時の文字コード     
UTF-8 UTF-8 UTF-8
cp932 ansi cp932
shift-jis ansi shift-jis

cp932もshift-jisもファイルだとansiだけどどっちつかうの?
cp932とshift-jisの違いは、例えば髙(はしごだか)﨑(たてさき)といった、環境依存文字が取り扱いできるかどうかの違いが一番の差かと思います。できるのがcp932になります。なので、例えば、他システムからansiのcsvファイルが連携されてくる時は、shift-jisではなく、cp392で取り込む想定にしておくほうが吉ということです。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3