You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:05:24