2016-08-13 6 views
0

Ich benutze Tweepy zum ersten Mal. Dieser Fehler wird momentanHat IOError: [Errno 2] Keine solche Datei oder Verzeichnis: Bedeutet die Datei wurde nicht geschrieben?

--------------------------------------------------------------------------- 
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' 

Ich habe das Gefühl, dass der Code, den ich habe, nicht funktioniert. Zum Beispiel druckt (Status) nichts. Außerdem sehe ich keine gespeicherte CSV- oder JSON-Datei im Verzeichnis.

Ich bin ein Neuling, also jede Hilfe/Dokumentation, die Sie anbieten können, wäre großartig!

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 

AKTUALISIERT: Erzeugt Datei aber Datei ist leer

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. Können Sie versuchen, mit dem vollständigen Pfad zu 'raw_tweets.json' beim Schreiben sowie lesen warum haben Sie zwei Klassen mit dem gleichen Namen. – Akilesh

+1

Ihre Klassen tun nichts, wenn sie nicht instanziiert und als Handler registriert werden. – Akilesh

+0

@Akilesh Versuchte den vollständigen Pfad ohne Erfolg :(Könnten Sie vorschlagen, wo/wie würde ich einen Handler in? –

Antwort

1

Sie sind kein Strom für den Hörer zu schaffen. Die vorletzte Zeile des folgenden Codes macht das. Danach müssen Sie den Stream starten, der die letzte Zeile ist. Ich muss Sie warnen, dass das Speichern in mongodb ist das Richtige zu tun, da die Datei, die ich es zu speichern scheint leicht auf mehrere GB wächst. Auch die Datei ist nicht genau ein JSON. Jede Zeile in der Datei ist ein JSON. Sie müssen es an Ihre Bedürfnisse anpassen.

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

Positiv hervorzuheben ist die Erstellung der JSON-Datei. Es war jedoch leer und ich habe die folgende Fehlermeldung erhalten. Exception in Gewinde Gewinde-5: Traceback (letzte Anruf zuletzt): Datei "C: \ Anaconda2 \ lib \ threading.py", Linie 801, in __bootstrap_inner self.run() Datei „C: \ Anaconda2 \ lib \ threading.py ", Zeile 754, im Lauf self .__ target (* selbst .__ args, ** self .__ kwargs) Datei" C: \ Anaconda2 \ lib \ site-packages \ tweepy \ streaming.py " , Zeile 294, in _run Ausnahme auslösen ConnectionError: ('Verbindung abgebrochen.', BadStatusLine ('' '',)) –

+0

Verwenden Sie genau den gleichen Code, den ich gepostet habe? Können Sie Ihren ursprünglichen Beitrag bearbeiten und Ihren neuen Code einfügen? Die Verbindung abgebrochen konnte bedeuten, dass Sie Ihre Internetverbindung verloren, wenn Tweepy Daten streaming, aber Ihre JSON-Datei sollte einige Daten gehabt haben. – Akilesh

+0

Ich habe den Beitrag aktualisiert. Ich habe es auch ein paar Mal ausgeführt, um zu überprüfen, def füllt nicht. –

Verwandte Themen