将json流写入文件限制输出大小

时间:2014-06-18 23:55:50

标签: python json twitter streaming twython

所以我正在使用twython(编辑: python Twitter客户端库)编写一个简单的python流监听器,当运行.py时,输出文件大小在1到5kb之间振荡。我想知道如何确保文件不断写入。下面是代码。

class MyStreamer(TwythonStreamer):
def on_success(self, data):
    with open(filename,'w')as outfile:
        json.dump(data,outfile,indent=4)
        outfile.flush()
        outfile.close()

    def on_error(self, status_code, data):
    print(status_code)

stream = MyStreamer(APP_KEY, APP_SECRET,
                OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
stream.statuses.filter(track=input_string)

1 个答案:

答案 0 :(得分:0)

您的问题没有得到很清楚的解释,但根据上面的评论,我认为您对输出文件不断被覆盖的事实感到困惑......而不是随着新数据的附加而增长。

问题是你的open(filename,'w')每次都会覆盖文件。试着这样做:

# global outfile 
outfile = open(filename,'w')

class MyStreamer(TwythonStreamer):
    def on_success(self, data):
        json.dump(data,outfile,indent=4)
        outfile.flush()

        def on_error(self, status_code, data):
            print(status_code)

stream = MyStreamer(APP_KEY, APP_SECRET,
                OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
stream.statuses.filter(track=input_string)

# when you are actually done writing output to it:
# outfile.close()

请注意,此方法不会生成有效的JSON文件,因为您只是将多个JSON块连接在一起。但这是一个单独的问题。 JSON首先不是一种“流式”格式,而是see this thread for some discussion