如何批量替换目录下所有CSV文件的表头且保留其余数据?
批量替换CSV文件统一表头的正确实现
原代码失效原因
你之前的代码运行后数据丢失,核心是两个逻辑错误:
- 对同一个文件先开读句柄,紧接着就用
w(写入覆盖模式)打开同路径文件,w模式会直接清空原文件的全部内容,后续再从已经被清空的读句柄拷贝数据,自然读不到任何原有内容。 - 就算文件没有被提前清空,直接用
copyfileobj拷贝全量内容,会把旧的第一行表头也一起写入,达不到替换表头的效果。
可直接运行的正确代码
代码支持自定义任意表头,除第一行旧表头外所有数据会完整保留:
import glob import os # 自定义统一表头,列之间用英文逗号分隔,支持任意合法内容 # 示例1:NEW_HEADER = "Apple,Orange,Lemon,Pear,Peach\n" # 示例2:NEW_HEADER = "1,j,er,fd,j5\n" NEW_HEADER = "id,t,s,p,date,e\n" # 替换为你存放CSV文件的文件夹路径匹配规则 TARGET_PATH = "/home/robert/Testing/D1/*.csv" for file in glob.glob(TARGET_PATH): if not os.path.isfile(file): continue # 先读取原文件全部内容,跳过第一行旧表头 with open(file, "r", encoding="utf-8") as rf: data_rows = rf.readlines()[1:] # 写入新表头 + 原有剩余数据 with open(file, "w", encoding="utf-8") as wf: wf.write(NEW_HEADER) wf.writelines(data_rows)
使用说明
- 替换表头只需要修改
NEW_HEADER变量的赋值即可,注意字符串末尾要保留\n换行符,避免新表头和第一行数据粘连。 - 如果你的CSV文件使用GBK等其他编码,把代码里的
encoding="utf-8"替换为对应编码参数即可。 - 批量操作前建议先备份原文件,避免编码不匹配、路径写错等问题导致数据异常。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

