如何用Python替换CSV文件中的逗号为分号且保留结构
解决CSV文件中替换逗号为分号且不破坏结构的问题
你的核心问题是直接全局替换逗号会把CSV的单元格分隔符和单元格内的逗号一并替换,导致文件结构损坏。正则或字符串替换无法区分这两种逗号,必须用专门的CSV处理工具。
正确解决方案:使用Python内置csv模块
csv模块能自动识别CSV的结构,区分单元格分隔符和单元格内的逗号,完美解决替换问题。代码如下:
import csv # 原文件路径和新文件路径 csv_path = r"test.csv" new_csv_path = r"new_test.csv" # 读取原CSV,解析所有单元格(自动处理含逗号的单元格) with open(csv_path, 'r', newline='', encoding='utf-8') as infile: reader = csv.reader(infile, delimiter=',') rows = list(reader) # 写入新CSV,用分号作为单元格分隔符 with open(new_csv_path, 'w', newline='', encoding='utf-8') as outfile: # QUOTE_MINIMAL会自动给包含分号/逗号的单元格加引号,避免混淆 writer = csv.writer(outfile, delimiter=';', quoting=csv.QUOTE_MINIMAL) writer.writerows(rows)
代码说明
csv.reader:按逗号分隔符正确解析每个单元格,哪怕单元格内包含逗号(比如"张三, 李四"会被识别为单个单元格)csv.writer:指定delimiter=';',输出时用分号分隔单元格;如果单元格内本身有分号或逗号,会自动用引号包裹,避免结构混乱newline='':遵循csv模块官方推荐,避免跨平台换行符问题encoding='utf-8':保证文件编码一致,防止乱码
原代码的问题
你之前用re.sub全局替换所有逗号,会把CSV的单元格分隔符也替换掉,比如原文件中姓名,描述,描述是喜欢苹果,香蕉,替换后会变成姓名;描述和喜欢苹果;香蕉,直接把一个单元格拆成两个,彻底破坏CSV结构。
内容的提问来源于stack exchange,提问作者Alex_theb
相关产品推荐
相关产品推荐

