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

Cra*_*igP 105 python dictionary

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

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

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

f = open('mycsvfile.csv','wb')
w = csv.DictWriter(f,my_dict.keys())
w.writerows(my_dict)
f.close()
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

Gar*_*tty 173

您正在使用DictWriter.writerows()哪个需要一个dicts列表,而不是一个dict.你DictWriter.writerow()想写一行.

DictWriter.writeheader()如果你想要一个csv文件的标题,你也会想要使用.

您还可能要检查出with声明打开文件.它不仅具有更多的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)
Run Code Online (Sandbox Code Playgroud)

哪个产生:

test,testing
1,2
Run Code Online (Sandbox Code Playgroud)

  • 小补充:您可以使用 `csv.DictWriter(f, ["testing"], extrasaction='ignore')` 轻松打印 dict 的子集 (2认同)

Ray*_*ger 85

你的代码非常接近工作.

尝试使用常规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())
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 找到答案:/sf/ask/234392231/ Between-each-row。它是 Python 3 特有的。`open` 调用必须类似于 `open('my.csv', 'w', newline='')` (4认同)