Python采集Twitter数据时出现文件已关闭I/O操作错误求助
问题:下载推文时触发文件已关闭的I/O错误
作为课程作业的一部分,尝试将5000条推文下载到文本文件中,但代码运行报错,已在线查找解决方案并尝试修复,但问题仍未解决。
原代码
import tweepy API_KEY = ("AAAAAAAAAAAAAAAAAAAAAIQDkgEAAAAA%2B5jSmwchB7hT3%2FQ8jh4EGrpZY%2FY%3Dcn2Qvt5oqUP6y03hOywzN7WVUF97kPY27B2pUyeDPleqZvLeAu") client = tweepy.Client(API_KEY) query = "covid" tfile = open("tweets.txt", "w") response = client.search_recent_tweets(query) for tweet in tweepy.Paginator(client.search_recent_tweets, query=query, max_results=100).flatten(limit=5000): ### WRITE CODE TO SAVE these tweets into a file here. tweet = str(tweet) + "/n" tfile.write(tweet) tfile.close()
报错信息
Traceback (most recent call last): File "data_collection.py", line 15, in <module> tfile.write(tweet) ValueError: I/O operation on closed file.
已尝试调整缩进,但仍出现相同错误。
解决方案
核心问题分析
- 缩进错误:
tfile.close()被放在for循环的缩进块内,第一次循环执行时就关闭了文件,后续循环再调用tfile.write()自然会触发"文件已关闭"的错误。 - 次要问题:换行符使用了
/n,这不是Python的有效换行符,应该改为\n,否则写入的内容不会正确换行。
修正后的代码(基础版)
import tweepy API_KEY = "AAAAAAAAAAAAAAAAAAAAAIQDkgEAAAAA%2B5jSmwchB7hT3%2FQ8jh4EGrpZY%2FY%3Dcn2Qvt5oqUP6y03hOywzN7WVUF97kPY27B2pUyeDPleqZvLeAu" client = tweepy.Client(API_KEY) query = "covid" tfile = open("tweets.txt", "w") # 未使用的response变量可删除 # response = client.search_recent_tweets(query) for tweet in tweepy.Paginator(client.search_recent_tweets, query=query, max_results=100).flatten(limit=5000): tweet_str = str(tweet) + "\n" tfile.write(tweet_str) # 循环结束后统一关闭文件 tfile.close()
更优方案(自动管理文件)
推荐使用with语句,它会在代码块结束后自动关闭文件,彻底避免手动管理文件的缩进问题,同时更安全:
import tweepy API_KEY = "AAAAAAAAAAAAAAAAAAAAAIQDkgEAAAAA%2B5jSmwchB7hT3%2FQ8jh4EGrpZY%2FY%3Dcn2Qvt5oqUP6y03hOywzN7WVUF97kPY27B2pUyeDPleqZvLeAu" client = tweepy.Client(API_KEY) query = "covid" with open("tweets.txt", "w") as tfile: for tweet in tweepy.Paginator(client.search_recent_tweets, query=query, max_results=100).flatten(limit=5000): tweet_str = str(tweet) + "\n" tfile.write(tweet_str)
内容的提问来源于stack exchange,提问作者karan rana
相关产品推荐
相关产品推荐

