如何将JSON转储到磁盘而不将它们合并到列表中?

时间:2015-04-07 06:30:00

标签: python json python-2.7 dictionary

我正在使用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上解决这些错误的问题之后,我明白应该将列表组合在类似列表的对象中然后转储 - 这是我不能做的事情。

1 个答案:

答案 0 :(得分:2)

您可以手动输出列表而无需在python中构建它,写出&#39; [&#39;然后流出dicts(由&#39;分隔,&#39;),当你想要关闭文件时,写出&#39;]&#39;。然后你应该能够再次加载它,例如:

>>> 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}]