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

Python中使用csv.writer后如何关闭文件?技术咨询

解决Python中csv.writer无法关闭文件的问题

你的问题核心是没有保留open()返回的文件对象引用,直接传给csv.writer后没法手动调用close()。下面给两种实用的解决方法:

方法一:保留文件对象引用(适合爬虫持续写入场景)

把文件对象单独存为实例属性,之后在合适的时机(比如爬虫结束时)手动关闭:

def open_spider(self, spider):
    time = dt.now().strftime(TIME_FORMAT)
    file_path = self.results_dir / FILE_NAME.format(time)
    # 保存文件对象到实例属性,添加newline=''避免csv换行混乱
    self.file_obj = open(file_path, 'w', newline='')
    self.writer = csv.writer(self.file_obj)
    self.writer.writerow(['Статус', 'Количество'])

# 在爬虫关闭的回调方法里关闭文件
def close_spider(self, spider):
    self.file_obj.close()

这样你在爬虫运行过程中可以通过self.writer持续写入数据,最后在close_spider里统一关闭文件,保证资源被正确释放。

方法二:使用上下文管理器(适合一次性写入场景)

如果你的需求是一次性写完所有数据,不需要后续追加,可以用with语句,它会在代码块结束后自动关闭文件:

def open_spider(self, spider):
    time = dt.now().strftime(TIME_FORMAT)
    file_path = self.results_dir / FILE_NAME.format(time)
    with open(file_path, 'w', newline='') as f:
        writer = csv.writer(f)
        writer.writerow(['Статус', 'Количество'])
        # 在这里一次性完成所有数据写入
    # with代码块结束后,文件会自动关闭,无需手动操作

注意:这种方法不适合爬虫过程中分批写入数据的场景,因为with块结束后文件就被关闭了,后续无法再写入。

内容的提问来源于stack exchange,提问作者xvovanbart

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:40:32