所以,我有一个 .json
文件,它是一个 list
字典。目前,我只是通过变量中的字典列表来更新文件,附加该列表并覆盖现有的 .json
文件。但是,将来,列表的大小可能会非常大,以至于写入文件可能需要很长时间,甚至比变量可以容纳的还要大。因此,我希望能够将 .json
附加到我的列表中,最好是在顶部。
目前,这是我的代码:
import json
new = [{'a': '1'}, {'b': '2'}, {'c': '3'}]
now = [{'d': '4'}, {'e': '5'}, {'f': '6'}]
for i in range(len(new)):
now.insert(i, new[i])
##now = [{'a': '1'}, {'b': '2'}, {'c': '3'}, {'d': '4'}, {'e': '5'}, {'f': '6'}]
with open('myfile.json', 'w') as f:
json.dump(now, f)
我想这样做,但不必将列表存储在 now
中,因为它可能会变得太大,并且不必每次都重写整个文件,因为这可能会花费太多时间。
答案 0 :(得分:0)
如果不以简单的方式读取文件,就不可能添加到列表中。
如果您保证文件始终包含有效的 JSON。然后,假设您有权访问 sed cmd,也许您可以运行 sed
命令在正确的位置添加项目。
import subprocess
import json
new = [{'a': '1'}, {'b': '2'}, {'c': '3'}]
# myfile.json contents => [{"d": "4"}, {"e": "5"}, {"f": "6"}]
try:
subprocess.run(['sed', '-i', '-e', 's/\[/\[{}, /'.format(json.dumps(new)[1:-1]), 'myfile.json'])
except Exception as e:
print(e)
这会将条目添加到列表的开头。根据需要修改 sed 命令。此外,这仅在文件已包含非空 JSON 列表时才有效。但这些情况可以用一点逻辑来处理。