如何用Python将输入CSV转换为指定表头的输出CSV?
解决CSV字段映射与数据筛选问题
要实现输入CSV字段到固定输出字段的映射,并只保留所需数据,只需在原代码基础上添加字段映射逻辑、修复语法错误即可,具体修改如下:
修改后的完整代码
import csv # 定义输出字段到输入字段的映射关系 field_mapping = { 'DIST_ID': 'DISTRIBUTION_ID', # 示例:输入的DISTRIBUTION_ID对应输出的DIST_ID 'FULLNAME': 'FULLNAME', # 输入输出字段名一致时,直接写相同名称 'LASTNAME': 'LAST_NAME', # 可根据实际需求调整映射规则 'ADDR1': 'ADDRESS_LINE_1' } # 固定输出字段名 out_fld_names = ['DIST_ID', 'FULLNAME', 'LASTNAME', 'ADDR1'] with open('file.csv', 'r', newline='') as infile, open('reordered.csv', 'w', newline='') as outfile: reader = csv.DictReader(infile) writer = csv.DictWriter(outfile, fieldnames=out_fld_names) # 写入输出表头 writer.writeheader() for row in reader: # 根据映射关系构建输出行数据 output_row = {} for out_field in out_fld_names: # 匹配对应输入字段,无对应字段时填充空字符串 in_field = field_mapping.get(out_field, '') output_row[out_field] = row.get(in_field, '') # 写入处理后的行 writer.writerow(output_row)
关键说明
- 字段映射字典:
field_mapping明确了输出字段与输入字段的对应关系,可根据实际输入CSV的字段名灵活调整。比如输入字段是DISTRIBUTION_ID,就映射到输出的DIST_ID;若输入输出字段名一致,直接保持键值相同即可。 - 数据筛选逻辑:遍历每个输出字段,通过映射找到对应的输入字段,从原行数据中提取值;如果输入中没有对应字段,默认填充空字符串,避免运行报错。
- 语法与模式修复:原代码中
csv.DictWriter的参数名错误(应为fieldnames而非outFldNames),且存在多余的=符号,已修复;同时将输出文件打开模式从'a'(追加)改为'w'(写入),避免重复写入表头。
内容的提问来源于stack exchange,提问作者DenairPete
相关产品推荐
相关产品推荐

