2016-08-13 2 views
0

저는 Tweepy를 처음 사용하고 있습니다. 현재이 오류가 발생합니다IOError : [Errno 2] 해당 파일이나 디렉토리가 없습니다. 파일이 작성되지 않았습니까?

--------------------------------------------------------------------------- 
IOError         Traceback (most recent call last) 
<ipython-input-11-cdd7ebe0c00f> in <module>() 
----> 1 data_json = io.open('raw_tweets.json', mode='r', encoding='utf-8').read() #reads in the JSON file 
     2 data_python = json.loads(data_json) 
     3 
     4 csv_out = io.open('tweets_out_utf8.csv', mode='w', encoding='utf-8') #opens csv file 

IOError: [Errno 2] No such file or directory: 'raw_tweets.json' 

나는 코드가 작동하지 않는다고 생각합니다. 예를 들어 인쇄 (상태)는 아무 것도 인쇄하지 않습니다. 또한 저장된 CSV 또는 JSON 파일을 디렉터리에 참조하십시오.

저는 초보자이므로 제공 할 수있는 도움말/문서는 훌륭합니다! 업데이트]

import time 
from tweepy import Stream 
from tweepy import OAuthHandler 
from tweepy.streaming import StreamListener 
import os 
import json 
import csv 
import io 
from pymongo import MongoClient 

ckey = 'blah' 
consumer_secret = 'blah' 
access_token_key = 'blah' 
access_token_secret = 'blah' 


#start_time = time.time() #grabs the system time 
keyword_list = ['keyword'] #track list 

#Listener Class Override 
class listener(StreamListener): 

    def __init__(self, start_time, time_limit=60): 

     self.time = start_time 
     self.limit = time_limit 
     self.tweet_data = [] 

    def on_data(self, data): 

     saveFile = io.open('raw_tweets.json', 'a', encoding='utf-8') 

     while (time.time() - self.time) < self.limit: 

      try: 

       self.tweet_data.append(data) 

       return True 


      except BaseException, e: 
       print 'failed ondata,', str(e) 
       time.sleep(5) 
       pass 

     saveFile = io.open('raw_tweets.json', 'w', encoding='utf-8') 
     saveFile.write(u'[\n') 
     saveFile.write(','.join(self.tweet_data)) 
     saveFile.write(u'\n]') 
     saveFile.close() 
     exit() 

    def on_error(self, status): 

     print status 

class listener(StreamListener): 
    def __init__(self, start_time, time_limit=10): 

     self.time = start_time 
     self.limit = time_limit 

    def on_data(self, data): 

     while (time.time() - self.time) < self.limit: 
      print(data) 
      try: 


       client = MongoClient('blah', 27017) 
       db = client['blah'] 
       collection = db['blah'] 
       tweet = json.loads(data) 

       collection.insert(tweet) 

       return True 


      except BaseException as e: 
       print('failed ondata,') 
       print(str(e)) 
       time.sleep(5) 
       pass 

     exit() 

    def on_error(self, status): 
     print(status) 
data_json = io.open('raw_tweets.json', mode='r', encoding='utf-8').read() #reads in the JSON file 
data_python = json.loads(data_json) 

csv_out = io.open('tweets_out_utf8.csv', mode='w', encoding='utf-8') #opens csv file 

는 : 파일을 생성하지만 파일은 청취자를위한 스트림을 생성하지 않는

import tweepy 
import datetime 
auth = tweepy.OAuthHandler('xxx', 'xxx') 
auth.set_access_token('xxx', 'xxx') 


class listener(tweepy.StreamListener): 

    def __init__(self, timeout, file_name, *args, **kwargs): 

     super(listener, self).__init__(*args, **kwargs) 
     self.start_time = None 
     self.timeout = timeout 
     self.file_name = file_name 
     self.tweet_data = [] 

    def on_data(self, data): 
     if self.start_time is None: 
      self.start_time = datetime.datetime.now() 
     while (datetime.datetime.now() - self.start_time).seconds < self.timeout: 
      with open(self.file_name, 'a') as data_file: 
       data_file.write('\n') 
       data_file.write(data) 

    def on_error(self, status): 
     print status 


l = listener(60, 'stack_raw_tweets.json') 
mstream = tweepy.Stream(auth=auth, listener=l) 
mstream.filter(track=['python'], async=True) 
+0

1. 'raw_tweets.json'에 대한 전체 경로를 사용해보십시오. 글을 쓰는 동안 왜 같은 이름을 가진 두 개의 클래스가 있는지 읽어 볼 수 있습니까? – Akilesh

+1

클래스는 인스턴스화되어 처리기로 어딘가에 등록되지 않으면 아무 것도하지 않습니다. – Akilesh

+0

@Akilesh 성공하지 못한 전체 경로를 시험해 보았습니다. (처리기를 어디에 넣을 지 제안 할 수 있습니까? –

답변

1

비어 있습니다. 마지막 코드는 아래의 한 줄을 사용합니다. 그 다음에 마지막 줄인 스트림을 시작해야합니다. 나는 이것을 mongodb에 저장하는 것이 내가 저장하고있는 파일이 몇 GB로 쉽게 자라는 것처럼 보이기 때문에 옳은 일이라고 경고해야한다. 또한이 파일은 정확히 json이 아닙니다. 파일의 각 행은 json입니다. 필요에 맞게 조정해야합니다.

import tweepy 
import datetime 
auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 
auth.set_access_token(access_token, access_secret) 


class listener(tweepy.StreamListener): 

    def __init__(self, timeout, file_name, *args, **kwargs): 

     super(listener, self).__init__(*args, **kwargs) 
     self.start_time = None 
     self.timeout = timeout 
     self.file_name = file_name 
     self.tweet_data = [] 

    def on_data(self, data): 
     if self.start_time is None: 
      self.start_time = datetime.datetime.now() 
     while (datetime.datetime.now() - self.start_time).seconds < self.timeout: 
      with open(self.file_name, 'a') as data_file: 
       data_file.write('\n') 
       data_file.write(data) 

    def on_error(self, status): 
     print status 


l = listener(60, 'raw_tweets.json') 
mstream = tweepy.Stream(auth=auth, listener=l) 
mstream.filter(track=['python'], async=True) 
+0

긍정적 인면에서 JSON 파일이 생성되었습니다. 그러나 그것은 비어 있었고 다음과 같은 오류 메시지가 나타납니다. 역 추적 (가장 최근 통화 최종) : 스레드 스레드 5 예외 파일 "C : \ Anaconda2 \ lib 디렉토리 \ threading.py", 라인 (801), __bootstrap_inner에서 self.run() 파일 "C : \ ("self .__ args, ** self .__ kwargs) 파일"C : \ Anaconda2 \ lib \ site-packages \ tweepy \ streaming.py " , 줄 294, _run에서 예외가 발생합니다. ConnectionError : ('연결이 중단되었습니다.', BadStatusLine (" ''")) –

+0

게시 한 것과 정확히 동일한 코드를 사용하고 있습니까? 원래 게시물을 편집하고 새 코드를 추가 할 수 있습니까? 연결이 중단되면 tweepy가 데이터를 스트리밍 할 때 인터넷 연결이 끊어 질 수도 있지만 json 파일에는 데이터가 있어야합니다. – Akilesh

+0

게시물을 업데이트했습니다. 또한 확인하기 위해 두 번 실행했지만 def는 채워지지 않았습니다. –

관련 문제