Python中覆盖CSV列失败:执行代码后CSV数据被清空
解决CSV列覆盖失败且数据被清空的问题
我来帮你排查代码里的问题,然后给出能安全修改CSV指定列的实现方案:
你的代码里的核心问题
- 直接用
w模式打开文件导致数据清空:open('...', 'w')会立刻截断文件,把原有内容全部删除,这是你数据消失的根本原因。 - 未读取原CSV数据:你只获取了文件的行数,但没有把原有行数据保存下来,后面的
row变量根本没定义,运行时会直接报错。 write方法用法错误:write是文件对象的方法,不是字符串的方法,而且你拼接图片路径的方式也不符合Python语法。- 手动自增循环变量多余:
for i in range(0,r)已经会自动让i从0递增到r-1,手动i=i+1会导致跳过一半的行。
正确的实现代码
下面是可以安全修改CSV指定列的代码,我会加上详细注释:
import csv # 配置参数:修改你要覆盖的列索引(从0开始计数)和文件路径 target_column = 0 # 比如要修改第一列就写0,第二列写1,以此类推 csv_file_path = 'C:/Users/KaanPISI/Desktop/seyiresas.csv' # 1. 先读取原CSV的所有数据到内存 all_rows = [] with open(csv_file_path, 'r', newline='', encoding='utf-8') as input_file: csv_reader = csv.reader(input_file) all_rows = list(csv_reader) # 把每一行都存到列表里 # 2. 遍历修改目标列的内容 for row_index in range(len(all_rows)): # 格式化生成图片路径,用f-string更简洁清晰 image_path = f'/home/nvidia/racecar-ws/src/racecar-controllers/deep_learning/data/057/{row_index:05d}.jpg' # 替换当前行的目标列内容 all_rows[row_index][target_column] = image_path # 3. 把修改后的数据写回CSV文件 with open(csv_file_path, 'w', newline='', encoding='utf-8') as output_file: csv_writer = csv.writer(output_file) csv_writer.writerows(all_rows)
关键注意事项
- 如果你的CSV文件有表头,记得修改循环的起始索引(比如
range(1, len(all_rows))),避免把表头也改成图片路径。 - 使用
with语句操作文件,Python会自动帮你关闭文件,避免资源泄漏和数据写入不完整的问题。 - 加上
encoding='utf-8'参数可以避免中文等非ASCII字符出现乱码问题(如果你的CSV里有这类字符的话)。
内容的提问来源于stack exchange,提问作者KAAN BOZOĞLU
相关产品推荐
相关产品推荐

