5

いくつかのデータを含むjsonファイルがあり、このファイルを時々更新したいと思います。

私はファイルを読みました:

with open('index.json', 'rb') as f:
    idx = json.load(f)

次に、潜在的に新しいデータからキーが存在するかどうかを確認し、キーが存在しない場合はファイルを更新します。

with open('index.json', mode='a+') as f:
    json.dump(new_data, f, indent=4)

ただし、この手順では、新しいjsonオブジェクト(python dict)を作成し、それを出力jsonファイルに新しいオブジェクトとして追加するだけなので、ファイルは無効なjsonファイルになります。

最初のdictを更新することで、ファイル全体を上書きせずに新しいデータをjsonファイルに追加する簡単な方法はありますか?

4

1 に答える 1

11

目的の処理を行う1つの方法は、ファイルの1行に1つのJSONオブジェクトを書き込むことです。私はそのアプローチを使用しており、それは非常にうまく機能します。

優れた利点は、一度に1行ずつ読み取ることができるため、ファイルをより効率的に(メモリ的に)読み取ることができることです。それらすべてが必要な場合は、Pythonでリストを組み立てるのに問題はありませんが、そうでない場合は、はるかに高速に動作し、追加することもできます。

したがって、最初にすべてのオブジェクトを作成するには、次のようにします。

with open(json_file_path, "w") as json_file:
    for data in data_iterable:
        json_file.write("{}\n".format(json.dumps(data)))

次に、効率的に読み取るために(ファイルサイズに関係なく、メモリをほとんど消費しません):

with open(json_file_path, "r") as json_file:
    for line in json_file:
        data = json.loads(line)
        process_data(data)

更新/追加するには:

with open(json_file_path, "a") as json_file:
    json_file.write("{}\n".format(json.dumps(new_data)))

お役に立てれば :)

于 2013-03-14T17:44:21.877 に答える