所以我正在使用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)
答案 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。