首页 > 解决方案 > 追加到 json 中转储的字典列表,而不用 python 加载列表

问题描述

在 python 中,我知道我可以在 .json 文件中转储一个字典列表,以便json.dump()json模块中存储。但是,在转储列表后,是否可以将更多字典附加到.json文件中的该列表而无需显式读取加载完整列表,追加,然后再次转储列表?

例如在.json我有

[{'a': 1}]

是否可以添加{'b', 2}到列表中以.json使文件变为

[{'a': 1}, {'b', 2}]

实际列表要长得多(大约一千万),所以我想知道是否有更直接的方法可以做到这一点,而无需从文件中读取整个列表以节省内存。

编辑:

PS:其他文件格式我也开放,只要能有效存储大量字典,能实现上面的功能

标签: pythonjson

解决方案


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 列表,任何期望这个文件中有一个列表的程序都会失败。


推荐阅读