我怎样将Python字典写入CSV文件?

168

我认为应该是一个非常简单的任务,但我似乎无法解决。

如何将Python字典写入CSV文件?我所要做的就是将字典键写入文件的顶部行,将键值写入第二行。

我最接近的方法是以下代码(来自他人帖子):

f = open('mycsvfile.csv','wb')
w = csv.DictWriter(f,my_dict.keys())
w.writerows(my_dict)
f.close()

问题是,上述代码似乎只将键写入第一行,仅此而已。我没有得到值被写入第二行的结果。

有什么想法吗?

2个回答

264

您正在使用DictWriter.writerows()方法,该方法期望一系列字典而不是一个字典。您需要使用DictWriter.writerow()方法来写入单行。

如果您想要CSV文件的标题行,则还需要使用DictWriter.writeheader()方法。

您可能还想查看with语句以便打开文件。它不仅更加Pythonic和易读,而且可以在出现异常时自动关闭文件。

以下是应用这些更改的示例:

import csv

my_dict = {"test": 1, "testing": 2}

with open('mycsvfile.csv', 'w') as f:  # You will need 'wb' mode in Python 2.x
    w = csv.DictWriter(f, my_dict.keys())
    w.writeheader()
    w.writerow(my_dict)

它会产生:

test,testing
1,2

2
小提示:您可以使用 csv.DictWriter(f, ["testing"], extrasaction='ignore') 轻松地打印字典的子集。 - Dawodo

121
你的代码离正常工作非常接近。
尝试使用普通的csv.writer而不是DictWriter。后者主要用于写入字典列表。
以下是一些将每个键/值对写入单独行的代码示例:
import csv

somedict = dict(raymond='red', rachel='blue', matthew='green')
with open('mycsvfile.csv','w') as f:
    w = csv.writer(f)
    w.writerows(somedict.items())

如果你希望所有的键都在一行上,而所有的值都在下一行上,那也很容易实现:
with open('mycsvfile.csv','w') as f:
    w = csv.writer(f)
    w.writerow(somedict.keys())
    w.writerow(somedict.values())

专业提示:在开发这样的代码时,将写入器设置为w = csv.writer(sys.stderr),这样您可以更轻松地查看生成的内容。当逻辑完善后,切换回w = csv.writer(f)

1
如果我想在一列中写入键,另一列中写入值,我该怎么做?我尝试搜索Python CSV文档,但似乎它没有writecolumn()函数。 - Anurag Sharma
1
@AnuragSharma 第一个代码块可以满足你的需求。 - wh1tney
第一个代码块是我正在寻找的内容,但不知何故它在每一行之间写入了空行。你知道是什么原因吗? - Cullub
3
找到了答案:https://dev59.com/MXA75IYBdhLWcg3wVniI。这是针对Python 3的。open调用必须像这样:open('my.csv', 'w', newline='') - Cullub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接