我正在尝试在json文件中存储大量列表。这些列表是从长时间运行的进程生成的,所以我想将新生成的信息添加到我的json文件中,因为它可用。
目前,为了扩展数据结构,我将json作为Python列表读入内存,将新数据附加到该列表,然后使用新创建的列表在json文件中写入旧数据。
def update_json_file(new_data):
with open('mycoolfile.json', 'rb') as f:
jsondata = json.load(f)
jsondata.append(new_data)
with open('mycoolfile.json', 'wb') as f:
json.dump(jsondata, f)
有没有比将所有内容都读入内存更好的方法?当文件大小增加时,这将不再是一个可行的策略。有没有一种简单的方法来扩展json文件中的结构?
答案 0 :(得分:1)
是的,你可以,正如zaquest所说,你可以寻找几乎文件的末尾并覆盖最终的']'外部清单。这里展示了如何做到这一点:
import json
import os
def append_list(json_filename, new_data):
with open(json_filename, 'r+b') as f:
f.seek(-1, os.SEEK_END)
new_json = json.dumps(new_data)
f.write(', ' + new_json + ']')
# create a test file
lists = [
'This is the first list'.split(),
"and here's another.".split(),
[10, 2, 4],
]
with open('mycoolfile.json', 'wb') as f:
json.dump(lists, f)
append_list('mycoolfile.json', 'New data.'.split())
with open('mycoolfile.json', 'rb') as f:
jsondata = json.load(f)
print json.dumps(jsondata, indent=4)
输出:
[
[
"This",
"is",
"the",
"first",
"list"
],
[
"and",
"here's",
"another."
],
[
10,
2,
4
],
[
"New",
"data."
]
]