如何使用DictWriter将str值赋入csv,每行有多个值

时间:2015-06-19 15:45:30

标签: python csv

我已经生成了一个dicts的词典,每个词包含5个随机生成的字符串元素。

我试图将每个dict输出到csv文件中的一行,只需" clean"字符串值,不带引号或括号。

从这开始:

numberofhands = range(int(raw_input("# of hands you want to generate: ")))

allhands = {} #create a place for all the hand dicts to go

for i in numberofhands: # loads allhands with specified # of 5 card hands
temphand = makehand(battlepile)
allhands.update({i:temphand})

with open(nameoffile,'wb') as outfile: #makes csv using writer and list of dict values
writer = csv.writer(outfile,delimiter='\t')
for key, value in allhands.items():
    aRow = []
    for i in value:
        aRow.append(value[i])
    writer.writerow([aRow])

输出如下:

  

['蜘蛛' '飞船' '恶' '豪猪' ' Sword']

     

['列车' ' Sumo Wrestler' '锯' '玻璃' '机器人']

     

['蜜蜂' '大炮' '家' ' T.N.T' ' Sumo Wrestler']

     

['空气' '蜘蛛' '风' '飞船' '辣']

     

['龟' '圣诞老人' '车' '飞机' '云']

我的目标是获得如下所示的输出:

  

蜘蛛太空船邪恶豪猪剑

     

火车相扑摔跤手锯玻璃机器人

     

Bees Cannon House T.N.T Sumo Wrestler

     

Air Spider Wind Spaceship辣味

     

乌龟圣诞老人汽车飞机云

我正在与DictWriter斗争 - 是否有一种更清洁,更pythonic的方法来实现这一目标?这是我目前的位置:

with open(nameoffile, 'wb') as outfile: #makes csv using DictWriter and list of dict values
fieldnames = [1,2,3,4,5]
writer = csv.DictWriter(outfile, dialect='excel', fieldnames=fieldnames)
for key, value in allhands.items():
    writer.writeheader()
    for k, v in value[key]:
        writer.writerow([v])

给出了KeyError: 0

我感谢任何指导。

2 个答案:

答案 0 :(得分:0)

这是一个如何通过DictWriter从Dict写入CSV文件的示例。

我箍它有帮助。

import csv
allhands = {1:'Spider', 2:'Spaceship', 3:'Evil', 4:'Porcupine', 5:'Sword'}          

nameoffile ='E://file.csv'
with open(nameoffile, 'wb') as outfile:
    #makes csv using DictWriter
    fieldnames = [1,2,3,4,5]
    writer = csv.DictWriter(outfile, dialect='excel', fieldnames=fieldnames)
    writer.writeheader()    
    temp = dict()
    for keys, values in allhands.items():
        temp[keys] = values
    writer.writerow(temp)

答案 1 :(得分:0)

感谢Sadegh,我得到了它的工作,但我不太明白为什么:)

令我困惑的部分是:

temp = dict()
for keys, values in allhands.items():
    temp[keys] = values
writer.writerow(temp)

我从未定义过dict(),是否创建了一个元组?

我的功能代码如下 - 我只是把这个答案放到了一个for循环中,迭代我的dicts字典。

with open(nameoffile, 'wb') as outfile: #makes csv using DictWriter and list of dict values
for k, v in allhands.items():
    fieldnames = [1,2,3,4,5]
    writer = csv.DictWriter(outfile, dialect='excel', fieldnames=fieldnames)
    temp = dict()
    for keys, values in v.items():
        temp[keys] = values
    writer.writerow(temp)

第二个问题:在for循环中重新启动writer是pythonic吗?我曾假设这将在csv文件中返回一行,已经覆盖了自己,并以最后一个dict的内容结束。

但它有效!只是希望我理解为什么:)