如何修改CSV文件指定行且不擦除全部内容?最高效的实现方法是什么?
问题原因
你的代码出现文件清空且修改无效的问题,主要有4个错误:
- 打开文件使用了
'w'写入模式,该模式打开文件时会直接清空原有内容,后续readlines()根本读不到任何数据 - 文件名
file.csv没有加引号,属于语法错误,正常运行会直接报错 - Python字符串是不可变类型,
line_4.replace()只会返回修改后的新字符串,不会修改原变量,你没有接收这个返回值等于没做修改 - 修改完内容后没有将新内容写回文件
实现方案
小文件适用方案(常规CSV优先使用)
普通CSV文件体积通常不大,直接读取全部内容到内存修改后写回,代码最简单易维护:
# 只读模式读取所有行 with open('file.csv', 'r', encoding='utf-8') as f: lines = f.readlines() # 确保文件至少有4行再修改,避免索引报错 if len(lines) >= 4: # 注意末尾加换行符,和原文件行格式保持一致 lines[3] = 'Temperature Level Wave Degre\n' # 写回修改后的全部内容 with open('file.csv', 'w', encoding='utf-8') as f: f.writelines(lines)
大文件适用方案(文件体积超过内存可用空间时使用)
如果CSV文件体积特别大,一次性读入内存会导致内存溢出,可以用临时文件逐行处理,内存占用极低:
import os import tempfile file_path = 'file.csv' # 逐行读取原文件,写入临时文件 with open(file_path, 'r', encoding='utf-8') as src_file, \ tempfile.NamedTemporaryFile('w', delete=False, encoding='utf-8') as tmp_file: for line_num, content in enumerate(src_file, 1): if line_num == 4: tmp_file.write('Temperature Level Wave Degre\n') else: tmp_file.write(content) # 用修改后的临时文件替换原文件 os.replace(tmp_file.name, file_path)
内容的提问来源于stack exchange,提问作者meuhfunk
相关产品推荐
相关产品推荐

