Python使用csv模块写入文件前如何清空原有内容避免内容追加
问题原因分析
- 你使用
r+模式打开CSV文件,当你在__init__方法中用reader读完所有文件内容后,文件指针已经移动到了文件末尾,后续调用writerow/writerows方法时,自然会从末尾位置开始写入,表现为追加内容。 - 就算你手动把指针移回文件开头,如果修改后的文件内容长度比原文件短,指针后的旧内容会残留,也无法得到预期结果。
解决方法
只需要修改write_table方法,写入前将指针移到文件开头,写入完成后截断文件即可:
def write_table(self): # 移动指针到文件起始位置 self.file.seek(0) self.wo.writerows(self.table_list) # 清空当前指针位置之后的所有残留内容 self.file.truncate()
修改后你原有的调用逻辑不需要做任何改动,即可实现覆盖原文件写入修改后的表格内容的效果。
可选优化方案
如果担心文件读写过程中出现异常导致原文件损坏,也可以采用读写分离的逻辑:
- 先以只读模式打开文件,读取所有内容到内存后直接关闭文件
- 完成内存中数据的修改后,再以写模式(
w)打开文件,写入全部内容后关闭
这种方式不需要处理指针和截断,逻辑更简单,也避免了读写同个句柄可能出现的异常问题。
内容的提问来源于stack exchange,提问作者new_to_code
相关产品推荐
相关产品推荐

