python - 追加到 json 中转储的字典列表,而不用 python 加载列表
问题描述
在 python 中,我知道我可以在 .json 文件中转储一个字典列表,以便json.dump()
从json
模块中存储。但是,在转储列表后,是否可以将更多字典附加到.json
文件中的该列表而无需显式读取加载完整列表,追加,然后再次转储列表?
例如在.json
我有
[{'a': 1}]
是否可以添加{'b', 2}
到列表中以.json
使文件变为
[{'a': 1}, {'b', 2}]
实际列表要长得多(大约一千万),所以我想知道是否有更直接的方法可以做到这一点,而无需从文件中读取整个列表以节省内存。
编辑:
PS:其他文件格式我也开放,只要能有效存储大量字典,能实现上面的功能
解决方案
JSON 要求列表以 a 关闭,"]"
因此它本身不可附加。您可以尝试打开文件末尾、删除“]”以及摆弄您尝试编写的新 JSON 来尝试一些棘手的事情。但这很乱。
JSON 的一个有趣之处在于编码没有换行符。你可以漂亮地打印一个 JSON,但如果你不这样做,你可以在一行上写一个完整的 JSON 记录。所以,不是一个 JSON 列表,而是有一堆行,每一行都是你的 dict 的 JSON 编码。
def append_dict(filename, d):
with open(filename, 'a', encoding='utf-8') as fp:
fp.write(json.dumps(d))
fp.write("\n")
def read_list(filename):
with open(filename, encoding='utf-8') as fp:
return [json.loads(line) for line in fp]
由于这个文件现在是一堆 JSON 对象,而不是一个 JSON 列表,任何期望这个文件中有一个列表的程序都会失败。
推荐阅读
- c# - 从 .Net 核心 API 引用类库(.Net 框架)方法引发错误
- javascript - 与号在表单中的显示方式与在列表中的显示方式不同
- mongodb - MongoDB LVM 快照备份和恢复不同的文件系统
- python - AttributeError:“QuerySet”对象没有属性“标签”
- javascript - 即使它在屏幕上没有改变,componentDidUpdate如何获取更新的dom元素
- wordpress - wordpress 无法打开流错误,而在 localhost 中运行良好
- javascript - 为什么即使我返回一个值,javascript递归函数也会返回“未定义”
- spring - Spring:哪个内部类在控制器中插入@RequestBody 参数?
- kubernetes - 通过 NGINX 入口控制器的 Minio 的 ERR_TOO_MANY_REDIRECTS
- excel - 如何让我的宏快捷键再次起作用?