如何使用CSV Writer/DictWriter按列匹配乱序字典写入CSV(Python3.5.2)
解决方法:使用csv.DictWriter类
在Python 3.5.2中,你可以直接利用标准库的csv模块里的DictWriter类来搞定这个问题。它的核心优势就是完全不关心字典键的顺序,只根据你指定的CSV表头(fieldnames)来匹配字典的键,把对应的值精准写入到对应的列中,完美适配你的场景。
具体步骤和代码示例:
- 定义CSV表头和待写入的字典集合
先把你的CSV表头存成一个列表(顺序就是你想要的最终CSV列顺序),再准备好你的字典数据:
import csv # 你的CSV表头,顺序就是最终CSV的列顺序 csv_headers = ["id", "username", "email", "create_time"] # 示例字典列表,键顺序混乱,但键和表头完全一致 data_dicts = [ {"email": "user1@example.com", "id": 1, "create_time": "2024-01-01", "username": "Alice"}, {"username": "Bob", "id": 2, "email": "user2@example.com", "create_time": "2024-01-02"}, {"create_time": "2024-01-03", "email": "user3@example.com", "username": "Charlie", "id": 3} ]
- 创建DictWriter对象并写入内容
打开CSV文件时记得加上newline=''(避免Python3下写入时出现多余空行),先通过writeheader()写入表头,再循环用writerow()写入每个字典:
# 打开文件('w'表示写入模式,encoding指定编码避免乱码) with open("output.csv", "w", encoding="utf-8", newline='') as csv_file: # 创建DictWriter对象,指定表头顺序 writer = csv.DictWriter(csv_file, fieldnames=csv_headers) # 写入CSV表头 writer.writeheader() # 循环写入每个字典 for data in data_dicts: writer.writerow(data)
为什么这个方法有效?
DictWriter的fieldnames参数直接定义了CSV的列顺序,不管你传入的字典键是什么顺序,它都会根据键名去匹配fieldnames里的列,把对应的值放到正确的位置上。- 虽然Python 3.5.2的字典是无序的(3.7+才默认有序),但
DictWriter只关注键的名称匹配,完全不受字典内部键顺序的影响。
内容的提问来源于stack exchange,提问作者Hisham Mubarak
相关产品推荐
相关产品推荐

