Quantcast
Viewing all articles
Browse latest Browse all 99

JSONファイルを読み込んで、辞書型配列をCSVに保存する

pythonを理解していないという事もあり、意外とはまってしまった。 調べると簡単に出てくるのだが、無駄に粘って時間をロス。 saveCSV.py import json import csv import os f = open('hoge.json', 'r', encoding='utf-8') #encoding='utf-8'がないと読み込めない data = f.read() #jsonファイルからとってきたデータ #[{"code":"13101","province":"東京都","city":"千代田区"},{"code":"13102","province":"東京都","city":"中央区"}] dict_list = json.loads(data) #jsonを辞書型リストに変換 #[{'code': '13101', 'province': '東京都', 'city': '千代田区'}, {'code': '13102', 'province': '東京都', 'city': '中央区'}] file_name = 'hoge' exist_file = os.path.exists(file_name + '.csv') #hoge.csvがあるかどうか確認 labels = dict_list[0] #データベースでいうカラムの部分。今回はcode,province,city if exist_file: #もしhoge.csvが存在していたら f = open('hoge.csv', 'a', newline="") #modeをaにする事で既存のファイルに追記してくれる #newline=""はCSVファイル内の行を詰めてくれる w = csv.DictWriter(f, fieldnames=labels) #辞書型リストを記入するのであればcsv.DictWriterを使う。ここでかなりはまった w.writerows(dict_list) #下記のようにfor文で回すことも可能 # for elem in dict_list: # w.writerow(elem) f.close() else: #hoge.csvがない場合 f = open('hoge.csv', 'a', newline="") #hoge.csvを作成 w = csv.DictWriter(f, fieldnames=labels) w.writeheader() #labelsで定義したカラムを先頭に追加。hoge.csvが存在しているときの処理にはない w.writerows(dict_list) f.close() 作成したファイルの中身は以下の通り。 hoge.csv code,province,city 13101,�����s,���c�� 13102,�����s,������ 文字化けでできているかどうかわからないので、 CSVファイル内でちゃんと保存されているか確認用のファイルを作成 parseCSV.py import csv f = open('new.csv', 'r') reader = csv.reader(f) dataArr = [] for i, row in enumerate(reader): print(row) f.close() ターミナル上で以下のように出力された terminal ['code', 'province', 'city'] ['13101', '東京都', '千代田区'] ['13102', '東京都', '中央区'] f = open('hoge.csv', 'a', newline="")の引数にencoding='utf8'を入れてやれば文字化けせずに書き込んでくれる。

Viewing all articles
Browse latest Browse all 99

Trending Articles