因此,正如在一些注释中提到的那样,包含数组中的数据更简单,但随着数据集大小的增加,解决方案在效率方面不能很好地扩展。当你想要访问数组中的随机对象时,你真的应该只使用迭代器,否则,生成器是可行的方法。下面我有一个读取器函数的原型,它单独读取每个json对象并返回一个生成器。
基本思想是通知读者分割托架字符“\ n”(或Windows的“\ r \ n”)。Python可以用做这个文件 .readline()函数。
import json
def json_readr(file):
for line in open(file, mode="r"):
yield json.loads(line)
但是,此方法仅在您按原样编写文件时才能正常工作 - 每个对象用新行字符分隔。下面我写了一个编写器的例子,它分隔了一个json对象数组并将每个对象保存在一个新行上。
def json_writr(file, json_objects):
f = open(file, mode="w")
for jsonobj in json_objects:
jsonstr = json.dumps(jsonobj)
f.write(jsonstr+"\n")
f.flush()
f.close()
你也可以做同样的操作文件 .writelines()和列表理解
...
jsobjs = [json.dumps(j)+"\n" for j in json_objects]
f.writelines(jsobjs)
...
如果你想附加数据而不是写一个新文件,只需将'mode =“w”'改为'mode =“a”'。
最后,我发现当我尝试在文本编辑器中打开json文件时,这不仅有助于提高可读性,而且还有助于更有效地使用内存。
在那个注意事项中,如果你在某些时候改变主意并想从阅读器中找到一个列表,那么Python允许你将一个生成器函数放在一个列表中并自动填充列表。换句话说,就是写
lst = list(json_readr(file))
希望这可以帮助。对不起,如果它有点冗长。