我正在尝试找到使用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')


谢谢

最佳答案

我的看法是基于Glenn的答案,但根据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("}")

关于python - 在Python中 append 到JSON(最好是受RAM限制),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4602262/

10-12 00:37
查看更多