如何替换CSV文件指定Payee列条目中的冗余双引号?
解决CSV文件Payee列双引号替换问题
嘿,我看到你已经搞定了初步的CSV清理,但在处理Payee列的双引号时卡壳了。别担心,这里有两种靠谱的方法帮你解决这个问题,尤其适合你手里的大型文件:
方法一:用Pandas处理(推荐,高效应对大型CSV)
既然你已经在代码里导入了Pandas,那直接用它来处理是最省心的——Pandas对大型CSV的处理效率很高,还能避免手动文本处理容易踩的坑。
import pandas as pd # 读取修改后的CSV文件,指定分号为分隔符,正确识别引号规则 df = pd.read_csv("report_mod.csv", sep=';', quotechar='"', doublequote=False) # 处理Payee列:把开头/结尾的连续双引号替换成单个双引号 # 正则表达式^""匹配开头的两个双引号,""$匹配结尾的两个双引号,替换为单个" df['Payee'] = df['Payee'].str.replace(r'^""|""$', '"', regex=True) # 如果你的Payee列里没有中间的连续双引号,也可以直接全局替换所有""为" # df['Payee'] = df['Payee'].str.replace('""', '"', regex=False) # 保存处理后的CSV,确保引号格式正确 df.to_csv("report_final.csv", sep=';', quotechar='"', index=False, quoting=1)
代码说明:
sep=';':指定CSV的分隔符是分号quotechar='"', doublequote=False:告诉Pandas字段用双引号包裹,且不自动转义字段内的双引号str.replace():针对Payee列的字符串进行精准替换,确保只修正目标位置的双引号
方法二:纯文本逐行处理(适合不想用Pandas的场景)
如果你不想依赖Pandas,也可以用Python的csv模块逐行处理,这样能精准控制每一列的修改,避免误替换其他列的内容:
import csv # 打开输入文件和输出文件 with open("report_mod.csv", "r", newline='') as infile, open("report_final.csv", "w", newline='') as outfile: # 创建CSV读取器和写入器,指定分隔符和引号规则 reader = csv.reader(infile, delimiter=';', quotechar='"') writer = csv.writer(outfile, delimiter=';', quotechar='"', quoting=csv.QUOTE_ALL) # 先写入表头 header = next(reader) writer.writerow(header) # 逐行处理数据 for row in reader: # Payee列是第6列,对应索引5 payee_field = row[5] if payee_field: # 只处理非空的Payee字段 # 替换开头的""为" if payee_field.startswith('""'): payee_field = payee_field.replace('""', '"', 1) # 替换结尾的""为" if payee_field.endswith('""'): payee_field = payee_field[:-2] + '"' row[5] = payee_field # 写入处理后的行 writer.writerow(row)
代码说明:
- 用
csv模块读取/写入能自动处理CSV的格式规则,避免手动分割字符串时出错 - 精准定位Payee列(索引5),只修改这一列的双引号,不会影响其他字段
内容的提问来源于stack exchange,提问作者Pangu
相关产品推荐
相关产品推荐

