如何将Python字典写入csv文件?

时间:2012-04-29 15:12:21

标签: python dictionary

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

如何将Python字典写入csv文件?我想要的只是将字典键写入文件的顶行,将键值写入第二行。

我最接近的是以下(我从其他人的帖子中得到的):

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

问题是,上面的代码似乎只是将密钥写入第一行,就是这样。我没有把值写到第二行。

有什么想法吗?

3 个答案:

答案 0 :(得分:163)

您正在使用DictWriter.writerows(),它需要一个dicts列表,而不是dict。您希望DictWriter.writerow()写一行。

如果您想要一个csv文件的标题,您还需要使用DictWriter.writeheader()

您还可以查看the with statement opening files。它不仅具有更多的pythonic和可读性,而且可以处理关闭,即使发生异常也是如此。

进行了这些更改的示例:

import csv

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

with open('mycsvfile.csv', 'wb') as f:  # Just use 'w' mode in 3.x
    w = csv.DictWriter(f, my_dict.keys())
    w.writeheader()
    w.writerow(my_dict)

产生:

test,testing
1,2

答案 1 :(得分:80)

您的代码非常接近工作。

尝试使用常规 csv.writer 而不是 DictWriter 。后者主要用于编写词典列表。

这里有一些代码将每个键/值对写在一个单独的行上:

import csv

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

如果你想要一行上的所有键和下一行的所有值,那也很容易:

with open('mycsvfile.csv','wb') as f:
    w = csv.writer(f)
    w.writerow(somedict.keys())
    w.writerow(somedict.values())

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

答案 2 :(得分:-12)

为什么要使用csv完成这个简单的任务?

keys,values=zip(*my_dict.items())
print >>f, ", ".join(keys)
print >>f, ", ".join(values)
f.close()

我以两种方式使用python:

1. As a proper language where I want all software engineering principles to hold in my code.
2. As a scripting language, where I want to just get something done and the code I write for this is not meant for reuse.

我的回答仅对第二个目的有用。并且还要考虑记住所有这些模块及其各自功能的痛苦:P