Python中如何将列表指定列(排除id)保存到CSV
解决OrderedDict列表导出CSV时排除指定列的问题
嘿,我来帮你搞定这个CSV导出的问题!你的代码思路没问题,但有几个小细节踩坑了,我给你修正并优化一下:
原代码的问题点
- 你用
d[1]、d[2]去取值是错误的:OrderedDict是键值对结构,必须通过键名(比如'name'、'email')访问,不能用索引位置。 - 变量名混淆:循环里遍历的是
new_d里的item,但取值时却用了d,应该统一遍历你原始的列表d。 - 表头字段和数据键的大小写对应:你定义的表头是
['Name','Email'],但原始数据的键是小写的name、email,要注意映射关系。
修正后的实现(两种方式)
方式1:用csv.writer手动构建行数据
这种方式适合简单场景,直接按需求提取对应字段的值:
import csv from collections import OrderedDict # 你的原始OrderedDict列表 d = [OrderedDict([('id', '1'), ('name', 'Jack'), ('email', 'jack@email.com')]), OrderedDict([('id', '2'), ('name', 'Ricky'), ('email', 'ricky@email.com')])] path = 'output.csv' # 替换成你的实际文件路径 fields = ['Name', 'Email'] # 打开文件时加上newline=''避免Windows下出现空行,指定utf-8编码保证兼容性 with open(path, 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow(fields) # 写入表头 for item in d: # 通过键名提取需要的字段值,注意原始数据的键是小写 writer.writerow([item['name'], item['email']])
方式2:用csv.DictWriter(更适合字典结构)
这种方式更灵活,尤其当字段较多时,不需要手动拼接每行数据:
import csv from collections import OrderedDict d = [OrderedDict([('id', '1'), ('name', 'Jack'), ('email', 'jack@email.com')]), OrderedDict([('id', '2'), ('name', 'Ricky'), ('email', 'ricky@email.com')])] path = 'output.csv' # 定义表头和原始数据键的映射关系 field_mapping = { 'Name': 'name', 'Email': 'email' } with open(path, 'w', newline='', encoding='utf-8') as f: # 传入表头字段名 writer = csv.DictWriter(f, fieldnames=field_mapping.keys()) writer.writeheader() # 自动写入表头 for item in d: # 构建只包含需要字段的字典 export_row = {header: item[key] for header, key in field_mapping.items()} writer.writerow(export_row)
额外注意事项
newline='':这是Python官方推荐的写法,能避免Windows系统下写入CSV时每行之间出现多余的空行。encoding='utf-8':确保导出的文件支持中文等特殊字符,避免乱码问题。- 如果后续需要调整导出的字段,只需要修改
field_mapping或者手动提取的键名即可,非常方便。
内容的提问来源于stack exchange,提问作者Keithx
相关产品推荐
相关产品推荐

