如何将嵌套字典按逐行键值对格式写入带换行的CSV文件
嵌套字典写入CSV实现方案
原代码错误点
- 写入传参不匹配:双层遍历已经拿到三个目标字段对应的值(外层键对应
Row、内层键对应Chip、内层值对应Voltage),但传入写入函数的是整个内层字典,字典键为50/150等数值,和预设表头字段名完全不匹配,导致写入内容异常。 - 冗余IO操作:每写入一行就执行一次文件打开、关闭操作,性能低下。
- 冗余关闭逻辑:
with上下文管理器会自动完成文件关闭,不需要手动调用close()方法。
最优实现代码
不需要拆分写表头、逐行追加的独立函数,直接通过一次文件IO完成全部写入,逻辑简洁性能更高:
from csv import writer my_dict = {1: {50: 6, 150: 5, 250: 6, 350:5.5, 450: 6.1}, 2: {50: 5.8, 150: 5, 250: 6.3, 350:5.5, 450: 5.9}, 3: {50: 6, 150: 5.8, 250: 6, 350:5.5, 450: 6.1}, 4: {50: 6.1, 150: 5.6, 250: 6, 350:5.5, 450: 6.1}} headers = ["Row", "Chip", "Voltage"] with open('mycsvfile2.csv', 'w', newline='') as f: csv_writer = writer(f) # 写入表头 csv_writer.writerow(headers) # 遍历嵌套字典逐行写入 for row_val, chip_data in my_dict.items(): for chip_val, voltage_val in chip_data.items(): csv_writer.writerow([row_val, chip_val, voltage_val])
输出结果
生成的CSV文件内容如下,完全符合预期格式:
Row,Chip,Voltage 1,50,6 1,150,5 1,250,6 1,350,5.5 1,450,6.1 2,50,5.8 2,150,5 2,250,6.3 2,350,5.5 2,450,5.9 3,50,6 3,150,5.8 3,250,6 3,350,5.5 3,450,6.1 4,50,6.1 4,150,5.6 4,250,6 4,350,5.5 4,450,6.1
CSV默认使用逗号作为字段分隔符,用表格工具或文本编辑器打开时会自动按列对齐,和要求的排版效果一致。
如果需要保留原有拆分函数的代码结构,只需要修改循环部分的传参逻辑,将每行数据组装为键名和表头一致的字典再传入即可:
for k, v in my_dict.items(): for ki, vi in v.items(): single_row = {"Row": k, "Chip": ki, "Voltage": vi} append_csv('mycsvfile2.csv', single_row, headers)
该写法可正常运行,但频繁开关文件的性能低于一次性写入方案,非必要不推荐。
内容的提问来源于stack exchange,提问作者Windy71
相关产品推荐
相关产品推荐

