2014-06-18 4 views
0

Итак, я пишу простой прослушиватель потока python с помощью twython (EDIT: клиентская библиотека python Twitter), при запуске .py размер выходного файла колеблется от 1 до 5kb. Я хотел бы знать, что делать, чтобы файл продолжал писать. Ниже приведен код.Запись 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

Зачем данные, которые каждый раз имеют одинаковый размер, начинаются с? Откуда вы знаете, что вы ** читаете ** одни и те же данные каждый раз? Вы пытались добавить 'print (data)' или другой оператор отладки в функцию 'on_success', чтобы проверить это предположение? –

+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