如何用Python从字典生成键值各占一行的CSV?writerow遇问题
解决Python字典转CSV的行输出问题
我猜你大概率是不小心在循环里逐个输出键值对了——比如遍历字典的每个元素时调用writerow(),这样自然会每行只出一个元素。咱们直接用正确的方式一次性输出整行就好,具体思路和代码如下:
核心解决步骤
要实现你要的效果,其实只需要两次writerow()调用:一次输出所有键作为表头,一次输出所有对应的值作为内容行。关键是要把字典的键和值都转换成完整的列表传入writerow(),而不是单个元素。
完整代码示例
import csv mergedDict = {'a': '1', 'b': '2', 'c': '3', 'd': '4', 'e': '5', 'f': '6', 'g': '7', 'h': '8', 'i': '9', 'j': '10'} # 使用with语句自动管理文件关闭,避免资源泄漏 with open('output.csv', 'w', newline='', encoding='utf-8') as csvfile: # 创建CSV写入对象 writer = csv.writer(csvfile) # 输出表头行:把字典的键转为列表传入writerow writer.writerow(list(mergedDict.keys())) # 输出内容行:把字典的值转为列表传入writerow writer.writerow(list(mergedDict.values()))
关键细节说明
- 字典顺序问题:Python 3.7及以上版本的普通字典是插入有序的,所以你的
mergedDict里a到j的顺序会被保留。如果是更早的Python版本,需要用collections.OrderedDict来保证顺序。 newline=''参数:这是csv模块官方推荐的写法,能避免Windows系统下输出的CSV出现多余空行的问题。- 为什么转成list:
mergedDict.keys()和mergedDict.values()在Python3中返回的是视图对象,虽然writerow()也能接受,但转成list更直观也更兼容一些。
输出结果验证
运行代码后生成的output.csv内容会完全符合你的预期:
a,b,c,d,e,f,g,h,i,j 1,2,3,4,5,6,7,8,9,10
内容的提问来源于stack exchange,提问作者mfederis
相关产品推荐
相关产品推荐

