2015-06-19 34 views
-1

我已经生成了一个dict字典,每个字典包含5个随机生成的字符串元素。如何使用每行多个值的DictWriter将str值转换为csv

我想输出每个字典到一个CSV文件中的单行,只有“干净”的字符串值,没有引号或括号。

开始与此:

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

输出看起来是这样的:

['蜘蛛'飞船'邪恶'豪猪 '亮剑']

[” Train''Sumo Wrestler''Saw''Glass''Robot']

['Bees''Cannon''House''TNT''Sumo Wrestler']

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

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

我的目标是让输出看起来像这样:

蜘蛛飞船危机豪猪剑

列车相扑看见玻璃机器人

只蜜蜂农府T.N.T相扑

空气蜘蛛风飞船辣

龟圣诞老人汽车飞机云

我与DictWriter挣扎 - 是有一个更清洁,Python的方式来实现这一目标?这里就是我目前:

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

我明白任何指导。

回答

0

这里有一个例子,说明如何通过DictWriter从字典写入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) 
+0

谢谢!在你的例子中,它看起来像缺少的步骤是从字典值创建一个列表,然后只是写了那个列表。我不太明白temp = dict()在做什么 - 我从来没有定义过dict()。那是一个元组吗? –

0

感谢萨德克,我得到它的工作,但我不明白为什么:)

这是令人困惑我的部分是:

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

我从未定义字典(),是创建一个元组?

我的功能代码如下 - 我只是将这个答案插入for循环迭代我的字典的字典。

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文件中返回一行,并覆盖自身,并以最后一个字典的内容结束。

但它的工作!只是希望我明白了为什么:)

相关问题