日本語を含むcsvファイルをjsonファイルに変換する際、文字コード変換で悩みました。
UnicodeDecodeError: 'ascii' codec can't decode byte...
読込むcsvファイルの文字コードがutf-8nに変換してある事を前提に次のコードで解決しました。
csvToJson.py
# -*- coding: utf-8 -*-
#モジュール
import codecs
import csv
import json
#CSVファイルを開く
f = open('読込むcsvファイル指定', 'r')
reader = csv.DictReader(f, fieldnames = ("フィールド名1", "フィールド名2", ...,"フィールド名N"))
print "CSV loaded."
#JSON形式に変換
out = json.dumps( [row for row in reader], sort_keys=False, ensure_ascii=False, encoding='utf_8' )
print "JSON parserd."
#JSONファイルに保存
f=codecs.open('書き出すjsonファイル指定','w', 'utf_8')
f.write(out)
print "JSON saved."
考察
python初心者でわからないことだらけですが、次のような内部処理で文字化けを防いでいる?
openでファイルを読込むときに文字コードを指定せず、csv.DictReaderでunicodeオブジェクトの
dictionary を作成。
json.dumpsでensure_ascii=Falseにすることでunicodeオブジェクトを扱えるようにし、encodingでutf-8を指定する事でoutオブジェクトの中身をutf-8にする事で、日本語を文字化けせずに出力する事が出来ている?