我是一个蟒蛇新手。我可以打印twitter搜索结果,但是当我保存到.txt时,我只得到一个结果。如何将所有结果添加到我的.txt文件中?
t = Twython(app_key=api_key, app_secret=api_secret, oauth_token=acces_token, oauth_token_secret=ak_secret)
tweets = []
MAX_ATTEMPTS = 10
COUNT_OF_TWEETS_TO_BE_FETCHED = 500
for i in range(0,MAX_ATTEMPTS):
if(COUNT_OF_TWEETS_TO_BE_FETCHED < len(tweets)):
break
if(0 == i):
results = t.search(q="@twitter",count='100')
else:
results = t.search(q="@twitter",include_entities='true',max_id=next_max_id)
for result in results['statuses']:
tweet_text = result['user']['screen_name'], result['user']['followers_count'], result['text'], result['created_at'], result['source']
tweets.append(tweet_text)
print tweet_text
text_file = open("Output.txt", "w")
text_file.write("@%s,%s,%s,%s,%s" % (result['user']['screen_name'], result['user']['followers_count'], result['text'], result['created_at'], result['source']))
text_file.close()
答案 0 :(得分:1)
您只需重新排列代码即可在执行循环之前打开文件:
t = Twython(app_key=api_key, app_secret=api_secret, oauth_token=acces_token, oauth_token_secret=ak_secret)
tweets = []
MAX_ATTEMPTS = 10
COUNT_OF_TWEETS_TO_BE_FETCHED = 500
with open("Output.txt", "w") as text_file:
for i in range(0,MAX_ATTEMPTS):
if(COUNT_OF_TWEETS_TO_BE_FETCHED < len(tweets)):
break
if(0 == i):
results = t.search(q="@twitter",count='100')
else:
results = t.search(q="@twitter",include_entities='true',max_id=next_max_id)
for result in results['statuses']:
tweet_text = result['user']['screen_name'], result['user']['followers_count'], result['text'], result['created_at'], result['source']
tweets.append(tweet_text)
print tweet_text
text_file.write("@%s,%s,%s,%s,%s" % (result['user']['screen_name'], result['user']['followers_count'], result['text'], result['created_at'], result['source']))
text_file.write('\n')
我在这里使用Python的和语句来打开上下文管理器。当您退出循环时,上下文管理器将处理关闭文件。我还添加了另一个 write 命令,该命令写出一个回车符,以便每行数据都在它自己的行上。
您也可以在附加模式下打开文件(&#39; a&#39;而不是&#39; w&#39;),这样您就可以删除第二个写入命令。
答案 1 :(得分:1)
您的问题有两种常规解决方案。哪个最好可能取决于您的计划的更多细节。
最简单的解决方案是在程序顶部(循环之前)打开文件一次,然后在后面的代码中反复重复使用相同的文件对象。只有在整个循环完成后才能关闭文件。
with open("Output.txt", "w") as text_file:
for i in range(0,MAX_ATTEMPTS):
# ...
for result in results['statuses']:
# ...
text_file.write("@%s,%s,%s,%s,%s" % (result['user']['screen_name'],
result['user']['followers_count'],
result['text'],
result['created_at'],
result['source']))
另一种解决方案是多次打开文件,但是在执行此操作时使用"a"
追加模式。追加模式不会像"w"
写入模式那样截断文件,并且会自动搜索到结尾,因此您不会覆盖文件的现有内容。如果您要写几个不同的文件,这种方法最合适。如果您只是写一个,我会坚持使用第一个解决方案。
for i in range(0,MAX_ATTEMPTS):
# ...
for result in results['statuses']:
# ...
with open("Output.txt", "a") as text_file:
text_file.write("@%s,%s,%s,%s,%s" % (result['user']['screen_name'],
result['user']['followers_count'],
result['text'],
result['created_at'],
result['source']))
最后一点:看起来你正在写出逗号分隔的数据。您可能希望使用csv
模块,而不是手动编写文件。它可以处理诸如引用或转义出现在数据中的任何逗号之类的事情。