pythonでjsonを処理

1999 ワード

今日jsonデータの一括処理に遭遇しました
jsonをcsvに変える
実はjsonファイルはkey valueの形式で、pythonを読むのはdictで、もし外に[]をつけたら、pythonを読むのはlistになって、読む時loadsとloadの違いが必要です
loadは、メモリに読み込まれたファイルのpythonとして解析される変数です.
loadsはハードディスクから読み出します
dumpは使ってない
 
csvを書くにはcsvを利用するだけである.writerでいいです
多くの書き込みの形式があって、ここでdictとlistをどのようにcsvに書き込むかに変換して、とても簡単で、いくつかの関数を書きました
import json
import csv
import codecs
import os


def acquire_json_file_name(dir_name):
    lst = []
    for root, dirs, files in os.walk(dir_name):
        for file in files:
            if os.path.splitext(file)[1] == '.json':
                lst.append(os.path.splitext(file)[0])
    return lst


def process_json_single(filename, resname):
    file = open(filename, encoding='UTF-8')
    json_file = json.load(file)
    file.close()
    f = codecs.open(resname, 'w', 'utf_8_sig')
    writer = csv.writer(f)
    for item in json_file:
        writer.writerow(item.values())
    f.close()


def process_all_dir(source_dir, res_dir):
    list_name = acquire_json_file_name(source_dir)
    for single_name in list_name:
        print(single_name)
        file_name = source_dir + single_name + '.json'
        res_name  = res_dir + single_name + '.csv'
        process_json_single(file_name, res_name)


def process_all_dir_dict(source_dir, res_dir):
    list_name = acquire_json_file_name(source_dir)
    for single_name in list_name:
        print(single_name)
        file_name = source_dir + single_name + '.json'
        res_name = res_dir + single_name + '.csv'
        file = open(file_name, encoding='UTF-8')
        json_file = json.load(file)
        file.close()
        f = codecs.open(res_name, 'w', 'utf_8_sig')
        writer = csv.writer(f)
        writer.writerow(json_file.values())
        if json_file['user'] != 'empty':
            writer.writerow(json_file["user"].values())
        f.close()