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
相关产品推荐
相关产品推荐

