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)
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)
.