Python CSV读写异常:每行末尾多余分号无法去除的技术求助
解决CSV文件末尾分号问题与去重方案
看起来你的问题主要出在两个地方:读取时错误地拆分了字段,以及需要处理末尾的多余分号和重复行。让我一步步帮你解决:
一、先搞清楚问题根源
你看到的'Images;;;;;;;'是因为写入CSV时,最后一个字段本身就带有这些分号(可能是原始data里的最后一项就包含分号,或者生成data时不小心加上的)。而你读取时的错误操作——row[0].split(",")——完全没必要,因为csv.reader已经帮你把每行按逗号分割成了row列表,你只需要直接处理列表里的每个字段就行。
二、正确的读取+去重+清理代码
下面是完整的解决方案,包含清理分号、去除重复行并生成干净的CSV:
import csv # 用来存储已经处理过的行,避免重复(列表不可哈希,用元组存) seen_rows = set() with open("products.csv", "r", newline="") as in_file, open("clean_products.csv", "w", newline='') as to_file: reader = csv.reader(in_file, delimiter=",") writer = csv.writer(to_file, delimiter=",", quotechar='"', quoting=csv.QUOTE_ALL) for row in reader: # 逐个清理字段中的分号和多余引号 cleaned_row = [] for field in row: # 去掉字段里的所有;;;;;;; cleaned_field = field.replace(";;;;;;;", "") # 移除字段前后的引号(如果写入时的QUOTE_ALL导致多余引号的话) cleaned_field = cleaned_field.strip('"') cleaned_row.append(cleaned_field) # 将清理后的行转为元组,检查是否重复 row_tuple = tuple(cleaned_row) if row_tuple not in seen_rows: seen_rows.add(row_tuple) writer.writerow(cleaned_row)
三、为什么你的原有代码处理不了分号?
你原来的代码里:
rowList = row[0].split(",")
这行是核心错误——row[0]只是每行的第一个字段(比如'Product Name'),你把它按逗号拆分后,处理的根本不是包含分号的最后一个字段,当然没法去掉分号啦!直接遍历row列表里的每个元素就对了。
四、从源头避免分号(可选)
如果这些分号是写入时不小心加上的,你可以在写入CSV之前就清理data里的字段,从根源解决问题:
import csv # 写入前先清理data中的分号 cleaned_data = [field.replace(";;;;;;;", "") for field in data] # 推荐用with语句管理文件,避免遗漏关闭操作 with open("products.csv", "a", newline="") as file: writer = csv.writer(file, delimiter=",", quotechar='"', quoting=csv.QUOTE_ALL) writer.writerow(cleaned_data)
这样后续读取时就不需要再处理分号了。
内容的提问来源于stack exchange,提问作者ghostcasper




