2013-07-23 2 views
0

У меня есть файл, написанный на Python, который выходит в Twitterstream и захватывает сообщения на основе ключевых слов в списке. Список очень длинный, и выход не все, что я хочу. Я хотел бы очистить файл, а также вывести результаты в текстовый файл.Выход Tweepy TwitterStreamer в .csv из Python 2.7

Вот мой текущий код, который записывает все сообщения в одной строке:

import sys 
.... 

if __name__ == '__main__': 
    with open("keywords.txt", "r") as f: 
     keywords = f.readlines() 


    l = StdOutListener()  
    auth = OAuthHandler(consumer_key, consumer_secret)  
    auth.set_access_token(access_token, access_token_secret)  

    stream = Stream(auth, l)   
    stream.filter(track=keywords]) 

Значение выше ничего в не тянет, не означает ничего, выводится в текстовый файл, когда я введите следующую команду prompt python hashtagworking.py > output.txt В stream.filter есть около 300 элементов, поэтому вместо фактического текста я хотел бы использовать файл txt. Также результаты отображаются в одной строке для каждого сообщения, которое написано так, я хотел бы переписать его для вывода в файл csv для каждого объекта в сообщении.

Я думаю, что это то, что я ищу, но хотелось бы, чтобы убедиться: similar problem

Я хотел бы также, чтобы получить вещи из других вложенных объектов как сущностей: {...} конкретно я хотел бы get hashtag из объекта объектов, но более конкретно любого объекта. Я пробовал такие вещи, как data.text.hashtagdata.entities.hashtagdata.entities.media.hashtag все безрезультатно.

ответ

1

Для вашего ключевого слова вопроса, если вы поместили их все в текстовом файле (один лексем в каждой строке)

with open("tokens.txt", "r") as f: 
    tokens = f.readlines() 

.... 
stream.filter(track=tokens) 

Для других ваших вопросов (выход в .csv) можно записать пример что вы хотите в файле?

class StdOutListener(StreamListener):   
     """ A listener handles tweets are the received from the stream. 
     This is a basic listener that just prints received tweets to stdout. 

     """   
    def on_status(self, data):    
     try:     
      print '%s , %s , %s , %s' % (data.text,\ <-- change to data.csv?    
      data.author.screen_name,data.created_at,data.source) 
      with open("data.csv", 'a+') as f: 
       f.write("{text},{name},{created},{source}\n" 
         .format(text=str(data.text), 
           name=str(data.author.screen_name), 
           created=str(data.created_at), 
           source=str(data.source)))    
      return True    
     except Exception, e:     
      print >> sys.stderr, 'Encountered Exception:', e     
      pass   

    def on_error(self, status):    
     return True 

Обратите внимание, что не является приемлемым долгосрочным решением, как вы открываете и закрыть файл каждый раз, когда твит фильтруется из потока (ака затопление I/O), что вы могли бы сделать, реализовать буфер (каждый раз, когда буфер заполняется, дамп его в файл).

Пожалуйста, обратите внимание, что я пишу в файл CSV вручную, если вы хотите больше глубины в манипулировании Csv, пожалуйста, посмотрите на http://docs.python.org/2/library/csv.html

+0

Спасибо @ketouem, как для файла CSV, я ищу, чтобы сбросить во всем, что делится в коде, если у меня есть 5 элементов в один прекрасный день, а затем добавьте 6-й на следующий день, я хочу, чтобы 6-й элемент был добавлен. Я расскажу о документации, которую вы указали, мне также нужно выяснить, как разбить элементы из части «сущностей», возможно, мне нужно определить как функцию или просто узнать, как разбить json. –

+0

Я обновил код до того, что я сейчас работаю для проблемы. –

+1

Обратите внимание, что вы можете легко манипулировать необработанными данными json с помощью модуля eponym (& builtin) http://docs.python.org/2/library/json. HTML – Ketouem

Смежные вопросы