【问题标题】:How to JSON dump multiple dictionaries to disk without combining them in a list?如何 JSON 将多个字典转储到磁盘而不将它们组合在列表中?
【发布时间】:2015-04-07 06:30:00
【问题描述】:

我正在使用 Twitter Python 库收集推文。由于内存问题,我不能先将所有字典组合在一个列表中,然后将其转储到文件中。因此,我想每隔几次迭代就将字典保存到磁盘上,比如在收集每 1000 个字典之后。有没有办法解决这个问题?

如果我直接转储字典而不先将它们放入列表中,则在从文件中检索 json 时会出现以下错误:

File "read_json.py", line 6, in <module>
jline = json.loads(line,"utf-8")
File "/usr/lib/python2.7/json/__init__.py", line 351, in loads
return cls(encoding=encoding, **kw).decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 369, in decode
raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 1 column 454154 - line 1 column 4100740 (char 454153 - 4100739)

在解决了这些错误的 Stackoverflow 问题后,我明白应该将字典组合成一个类似列表的对象,然后转储 - 这是我做不到的。

【问题讨论】:

    标签: python json python-2.7 dictionary


    【解决方案1】:

    你可以手动输出列表而不用python构造它,写出'['然后流出dicts(用','分隔),当你想关闭文件时,写出']'。然后你应该可以再次加载它,例如:

    >>> from json import loads, dumps
    >>> a = {'a':1, 'b':2}
    >>> b = {'c':3, 'd':4}
    >>> loads("[{},{}]".format(dumps(a), dumps(b)))
    [{'a': 1, 'b': 2}, {'c': 3, 'd': 4}]
    

    【讨论】:

    • 从你那里得到启发,我以稍微不同的方式做到了:fout = open(filename, "a") fout.write("[") tweets = getTweetsFromAPI() maxId = getMaxId(tweets) json.dump(tweets,fout) while 1: tweets = getTweetsFromAPI(max_id=maxId) fout.write(",") json.dump(tweets,fout) fout.write("]") fout.close() 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 2019-03-12
    • 2012-05-05
    相关资源
    最近更新 更多