2014-10-31 44 views
0

作为Python的新用户,我遇到了以下代码的问题。我不需要在屏幕上打印Twitter搜索的结果,而需要保存文件(理想情况下是管道分隔符,我还不知道如何生成...)。但是,下面的代码运行正常,但不会创建Output.txt文件。它做了一次,然后再也没有。我在Mac OS上运行它,并用Ctrl + C结束代码(因为我仍然不知道如何修改它以返回特定数量的推文)。我认为这个问题可能与Flush'ing而是力图包括来自这篇文章的选项后:Flushing issues他们都不似乎工作(除非我做错了什么事比可能更多...)保存输出的Python问题

import tweepy 
import json 
import sys 

# Authentication details. To obtain these visit dev.twitter.com 
consumer_key = 'xxxxxx' 
consumer_secret = 'xxxxx' 
access_token = 'xxxxx-xxxx' 
access_token_secret = 'xxxxxxxx' 

# This is the listener, resposible for receiving data 
class StdOutListener(tweepy.StreamListener): 
    def on_data(self, data): 
     # Twitter returns data in JSON format - we need to decode it first 
     decoded = json.loads(data) 

     # Also, we convert UTF-8 to ASCII ignoring all bad characters sent by users 
     print '@%s: %s' % (decoded['user']['screen_name'], decoded['text'].encode('ascii', 'ignore')) 
     print '' 
     return True 

    def on_error(self, status): 
     print status 

if __name__ == '__main__': 
    l = StdOutListener() 
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 
    auth.set_access_token(access_token, access_token_secret) 

    print "Showing all new tweets for #Microsoft" 

    stream = tweepy.Stream(auth, l) 
    stream.filter(track=['Microsoft']) 

    sys.stdout = open('Output.txt', 'w') 

回答

2

我认为你会更好地关闭StdOutListener,并让它直接写入文件。将sys.stdout分配给一个文件是很奇怪的。这样,你可以用print的东西进行调试输出。另请注意,文件模式“w”会在打开文件时截断文件。

class TweepyFileListener(tweepy.StreamListener): 
    def on_data(self, data): 
     print "on_data called" 
     # Twitter returns data in JSON format - we need to decode it first 
     decoded = json.loads(data) 
     msg = '@%s: %s\n' % (
      decoded['user']['screen_name'], 
      decoded['text'].encode('ascii', 'ignore')) 

     #you should really open the file in __init__ 
     #You should also use a RotatingFileHandler or this guy will get massive 
     with open("Output.txt", "a") as tweet_log: 
      print "Received: %s\n" % msg 
      tweet_log.write(msg) 
+0

谢谢,这很有道理。恐怕我的编码水平非常有限,以至于更复杂的建议可能会让我花费太长时间:/ 但无论如何,这会带回我原来的问题 - 这个工作有一次,然后看起来Output.txt只是获取修正;即使我更改名称并重新运行脚本(我用Ctrl + C关闭它,但我不确定它是否正确)。所以万一我想运行这个脚本为不同的关键字和写入不同的文件它不工作... – Zegro 2014-10-31 14:37:27