在Python中附加JSON(由于RAM约束而最佳)
题
我正在尝试找到使用Python将一些数据附加到JSON文件的最佳方法。基本上,我想说的是100个线程将数据打开到数组中。完成后,他们使用JSON.DUMP将其发送到JSON文件。但是,由于这可能需要几个小时才能使阵列堆积,所以我最终最终耗尽了RAM。因此,我试图查看在此过程中使用最少的RAM的最佳方法是什么。以下是我所消耗的东西。
i = 0
twitter_data = {}
for null in range(0,1):
while True:
try:
for friends in Cursor(api.followers_ids,screen_name=self.ip).items():
twitter_data[i] = {}
twitter_data[i]['fu'] = self.ip
twitter_data[i]['su'] = friends
i = i + 1
except tweepy.TweepError, e:
print "ERROR on " + str(self.ip) + " Reason: ", e
with open('C:/Twitter/errors.txt', mode='a') as a_file:
new_ii = "ERROR on " + str(self.ip) + " Reason: " + str(e) + "\n"
a_file.write(new_ii)
break
## Save data
with open('C:/Twitter/user_' + str(self.id) + '.json', mode='w') as f:
json.dump(twitter_data, f, indent=2, encoding='utf-8')
谢谢
解决方案
我的看法是基于格伦回答的想法,但按照OP的要求序列化一个大命令,并使用更多的Pythonic enumerate
而不是手动增加 i
(可以通过保留单独计数并从中减去错误来考虑错误 i
在劳累之前 f
):
with open('C:/Twitter/user_' + str(self.id) + '.json', mode='w') as f:
f.write('{')
for i, friends in enumerate(Cursor(api.followers_ids,screen_name=self.ip).items()):
if i>0:
f.write(", ")
f.write("%s:%s" % (json.dumps(i), json.dumps(dict(fu=self.ip, su=friends))))
f.write("}")
其他提示
在创建的情况下输出单个项目作为数组,为其周围的数组创建JSON格式。 JSON是一种简单的格式,因此这是微不足道的。
这是一个简单的示例,可以打印出JSON数组,而无需将整个内容保存在内存中。数组中只需要一次存储一个元素。
def get_item():
return { "a": 5, "b": 10 }
def get_array():
results = []
yield "["
for x in xrange(5):
if x > 0:
yield ","
yield json.dumps(get_item())
yield "]"
if __name__ == "__main__":
for s in get_array():
sys.stdout.write(s)
sys.stdout.write("\n")
不隶属于 StackOverflow