DAT转CSV时数据额外添加引号的问题排查与解决
问题原因
你的输入DAT文件本身就是标准CSV格式(字段用双引号包裹、逗号分隔),但你用了split(',')手动拆分每行,导致每个字段保留了原始的双引号(比如拆分后得到'"TOA5"'这种值)。而Python的csv.writer在写入时,会自动对包含双引号的字段进行转义处理——把单个双引号替换成两个双引号,再给整个字段套上引号,最终就出现了多层嵌套的引号。
解决方案
方案1:用csv.reader读取源文件(推荐)
既然源文件本身就是CSV格式,直接用csv.reader读取,它会自动处理引号、逗号分隔这些细节,提取出不带多余引号的字段,再用csv.writer写入即可:
import csv with open(file_dat_new, 'r') as dat_file: with open(file_csv_new, 'w', newline='') as csv_file: csv_reader = csv.reader(dat_file) csv_writer = csv.writer(csv_file) for row in csv_reader: csv_writer.writerow(row)
方案2:手动去除字段首尾的引号(仅当确定字段格式固定时用)
如果坚持要手动拆分,就在处理每个字段时,用strip('"')去掉首尾的双引号:
import csv with open(file_dat_new, 'r') as dat_file: with open(file_csv_new, 'w', newline='') as csv_file: csv_writer = csv.writer(csv_file) for row in dat_file: # 先拆分,再去掉每个字段首尾的双引号和空白字符 row = [value.strip().strip('"') for value in row.split(',')] csv_writer.writerow(row)
注意:这个方案只适合所有字段都被双引号包裹的情况,如果有的字段没有引号或者内部包含逗号,会出问题,所以优先用方案1。
内容的提问来源于stack exchange,提问作者EldritchOstrich
相关产品推荐
相关产品推荐

