如何用Python csv.writer给CSV表头末尾添加分号?代码问题排查
CSV表头末尾追加分号的问题解决
你的代码问题分析
- 原写入函数的问题:
csv.writer的delimiter参数仅用于分隔字段,只会在字段之间插入分隔符,最后一个字段末尾不会自动添加。因此用writerow(HEADER_LIST)生成的表头,最后必然没有分号,这是模块的默认行为。 - 追加函数的问题:
a+模式打开文件时,文件指针默认指向末尾,写入内容会直接追加到文件最后一行,无法修改表头。writerow(";")会把字符串";"拆分为单个字符的列表写入,相当于新增一行仅含分号的无效记录,完全不符合需求。
可行解决方案
方案1:手动拼接表头字符串,单独写入
直接构造带末尾分号的表头字符串,用文件对象的write方法写入,再用csv.writer处理数据行:
HEADER_LIST: list = ["NAME_1", "NAME_2", "NAME_3", "NAME_4", "NAME_5", "NAME_6"] def writing_to_csv(CSV_PATH, FILE_TO_WRITE) -> Path: pathFile: Path = Path(CSV_PATH).joinpath(FILE_TO_WRITE) rows = zip(LIST_1, LIST_2, LIST_3, LIST_4, LIST_5, LIST_6) with open(pathFile.as_posix(), "w+", newline='') as csv_file: # 手动拼接表头并追加末尾分号 header_str = ";".join(HEADER_LIST) + ";\n" csv_file.write(header_str) # 写入数据行 to_write = csv.writer(csv_file, delimiter=";") for row in rows: to_write.writerow(row) return pathFile
方案2:给表头列表添加空元素
利用csv.writer的分隔逻辑,在表头列表最后加一个空字符串,模块会在最后一个有效字段后加分号(用于分隔空元素),实现末尾带分号的效果:
HEADER_LIST: list = ["NAME_1", "NAME_2", "NAME_3", "NAME_4", "NAME_5", "NAME_6", ""] def writing_to_csv(CSV_PATH, FILE_TO_WRITE) -> Path: pathFile: Path = Path(CSV_PATH).joinpath(FILE_TO_WRITE) rows = zip(LIST_1, LIST_2, LIST_3, LIST_4, LIST_5, LIST_6) with open(pathFile.as_posix(), "w+", newline='') as csv_file: to_write = csv.writer(csv_file, delimiter=";") to_write.writerow(HEADER_LIST) for row in rows: to_write.writerow(row) return pathFile
注:此方案会让表头多一个空字段,若平台仅要求末尾有分号、不校验字段数量,这是最简便的方法。
方案3:修改已生成的CSV文件
若不想改动原写入逻辑,可在文件生成后读取内容修改第一行:
def add_semicolon_to_header(CSV_PATH, FILE_TO_WRITE): pathFile: Path = Path(CSV_PATH).joinpath(FILE_TO_WRITE) # 读取所有行内容 with open(pathFile, "r", newline='') as f: lines = f.readlines() # 修改第一行,追加末尾分号(先移除原行的换行符) if lines: lines[0] = lines[0].rstrip("\n") + ";\n" # 将修改后的内容写回文件 with open(pathFile, "w", newline='') as f: f.writelines(lines)
调用时先执行writing_to_csv生成文件,再执行此函数修改表头即可。
内容的提问来源于stack exchange,提问作者Redal_Snake
相关产品推荐
相关产品推荐

