2013-07-23 50 views
0

我有一个用Python编写的文件,发送到Twitterstream并根据列表中的关键字获取消息。名单很长,输出不是我想要的。我想清理文件并将结果输出到文本文件。输出Tweepy TwitterStreamer到Python 2.7中的.csv

这里是我当前的代码,这将所有邮件写入一行:

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]) 

以上不拉任何东西,没什么意思是输出到当我输入一个文本文件,在命令如下提示python hashtagworking.py > output.txt stream.filter有大约300个项目,所以我想用一个txt文件来代替实际的文本。此外,每条消息的结果都显示在一条消息中,我将其重写为输出到消息中每个对象的csv文件。

我觉得这是我所期待的,但想确保:similar problem

我也想从其他嵌套对象之类的实体:{...}具体我想从实体对象获取哈希标签,但更具体地说是任何对象。我尝试过的东西,如data.text.hashtagdata.entities.hashtagdata.entities.media.hashtag都无济于事。

回答

1

对于关键字的问题,假设你已经把他们都在一个txt文件(每行一个标记)

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

请注意,您可以使用eponym(&builtin)模块http://docs.python.org/2/library/json轻松操作原始json数据。 HTML – Ketouem