2014-06-18 70 views
0

因此,當運行.py輸出文件大小在1和5kb之間振盪時,我正在使用twython編寫一個簡單的python流監聽器(編輯: python Twitter客戶端庫)。我想知道該怎麼做,以確保文件不斷寫入。以下是代碼。將json流寫入文件限制輸出大小

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

爲什麼每次寫入的數據都有相同的大小開始?你怎麼知道你每次都在閱讀**相同的數據?您是否曾嘗試在'on_success'函數中添加'print(data)'或其他調試語句來檢查這個假設? –

+0

你問如何追加到文件而不是覆蓋它?打開文件時使用模式'a'而不是'w'。但是,文件中的一串JSON字符串不是有效的JSON文件,所以這可能不是一個好主意。 – Barmar

+0

@Dan,在數據流時,輸出文件大小在幾秒鐘內發生變化(例如,1,2,3,1,2,1 kb等)。大小不嚴格增加。 – Diabellical

回答

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

+0

感謝您的指導。我是編程和python的新手。這工作完美。再次感謝。 – Diabellical