2014-06-18 2 views
0

twython (편집 : 파이썬 트위터 클라이언트 라이브러리)를 사용하여 간단한 파이썬 스트림 수신기를 쓰고 있습니다. 출력 파일 크기가 .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

파일을 덮어 쓰지 않고 추가하는 방법을 묻고 있습니까? 파일을 열 때'w' 대신에'a' 모드를 사용하십시오. 하지만 파일의 JSON 문자열 시퀀스는 유효한 JSON 파일이 아니므로 좋은 생각이 아닙니다. – Barmar

+0

@Dan, 스트리밍하는 동안 출력 파일 크기가 몇 초 만에 변경됩니다 (예 : 1, 2, 3, 1, 2, 1kb 등). 엄격하게 크기가 증가하지 않습니다. – Diabellical

답변

0

난 당신이 출력 파일이 지속적으로 덮어지고 있다는 사실에 대해 혼란스러워하는 생각 위의 문제는 매우 명확하게 의견을 설명하지만 기반으로하지 않습니다 ...보다는 성장과 같은 새로운 데이터가 추가됩니다 .

문제는 귀하의 open(filename,'w')이 통과 할 때마다 파일을 덮어 쓰는 것이 문제입니다. 대신이 일을보십시오 : 당신은 그냥 JSON의 함께 여러 덩어리을 연결하고 있기 때문에이 방법 가 유효한 JSON 파일을 생산하지 않습니다

# 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은 처음에는 "스트리밍"형식이 아니지만 see this thread for some discussion입니다.

+0

감사합니다. 나는 프로그래밍과 파이썬에 익숙하지 않다. 이것은 완벽하게 작동했습니다. 다시 한번 감사드립니다. – Diabellical