Python字典到CSV

时间:2011-11-30 19:07:44

标签: python csv dictionary

我已编写代码将CSV读入python字典,效果很好。我正在尝试将字典恢复为CSV格式。我写了以下内容:

import csv

itemDict={}

listReader = csv.reader(open('/Users/broberts/Desktop/Sum_CSP1.csv','rU'), delimiter = ',', quotechar='|')

for row in listReader:
    fID = row[0]
    fClassRange = row[1]
    fArea = row[2]

    if itemDict.has_key(fID):
        itemDict[fID][fClassRange]=fArea
    else:
        itemDict[fID] = {'5.0 to 5.25':'','5.25 to 5.5':'','5.5 to 5.75':'','5.75 to 6.0':'','6.0 to 6.25':'','6.25 to 6.5':'','6.5 to 6.75':'','6.75 to 7.0':'','7.0 to 7.25':'','7.25 to 7.5':'','7.5 to 7.75':'','7.75 to 8.0':'','8.0 to 8.25':'',}
        itemDict[fID][fClassRange]=fArea

listWriter = csv.writer(open('/Users/broberts/Desktop/Sum_CSP1_output.csv', 'wb'), delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)

for a in itemDict:
    print a
    listWriter.writerow(a)

在最后一个块中,listWriter不会向CSV写入任何内容,尽管它会打印出来。我相信这与字典无序有关。我真的需要写出fID和每个fID相关的每个键(fClassRange ex。“5.0到5.25”),然后写出与每个fClassRange相关联的值fArea到CSV,但我还没有得到那么多我的代码,因为我无法弄清楚如何写出甚至fID。

我研究过使用DictWriter,但我无法弄清楚如何告诉它所需的字段名是什么。

6 个答案:

答案 0 :(得分:20)

默认编写者需要一个列表,这就是为什么它不适合你。要使用dictwriter,只需将listwriter =行更改为:

listWriter = csv.DictWriter(
   open('/Users/broberts/Desktop/Sum_CSP1_output.csv', 'wb'),
   fieldnames=itemDict[itemDict.keys()[0]].keys(),
   delimiter=',',
   quotechar='|',
   quoting=csv.QUOTE_MINIMAL
)

或者,如果您知道字段应该是什么,则可以将fieldnames设置为fieldnames=['arbitrary','list','of','keys']

答案 1 :(得分:11)

示例数据:

float3

使用pandas将单词列表转换为CSV的单行程序:

mydict = [{"col1": 1000, "col2": 2000}, {"col1": 3000, "col2": 4000}]

结果:

import pandas as pd

pd.DataFrame(mydict).to_csv('out.csv', index=False)

答案 2 :(得分:1)

后人:

您应该使用iteritems()迭代字典,因此最后一部分变为

for name, values in itemDict.iteritems():
    print values
    listWriter.writerow(values)

答案 3 :(得分:1)

这是我使用的,它简单,对我来说很好。 如果只有一个字典,请使用此

my_dict = {"tester": 1, "testers": 2}
with open('mycsvfile.csv', 'wb') as f:  
    w = csv.DictWriter(f, my_dict.keys())
    w.writerow(dict((fn,fn) for fn in my_dict.keys()))
    w.writerow(my_dict)

$ cat mycsvfile.csv
testers,tester
2,1

如果你有一个词典列表,就像你从SQL查询中得到的那样,你会喜欢这样。

my_dict = ({"tester": 1, "testers": 2},{"tester": 14, "testers": 28})
with open('mycsvfile.csv', 'wb') as f:  
    w = csv.DictWriter(f, my_dict[0].keys())
    w.writerow(dict((fn,fn) for fn in my_dict[0].keys()))
    w.writerows(my_dict)

cat mycsvfile.csv
testers,tester
2,1
28,14

答案 4 :(得分:0)

最简单的方法

您可以将字典转换为Dataframe并将其写入csv 例如

import pandas as pd
my_dict = {"tester": 1, "testers": 2}
df=pd.DataFrame(my_dict,index=[0])
df.to_csv("path and name of your csv.csv")

输出

   tester  testers
0       1        2

答案 5 :(得分:0)

d = [{'a': 1, 'b': 2},{'a': 3, 'b': 4}]

with open('csv_file.csv', 'w', newline='\n') as f:
    w = csv.DictWriter(f, d[0].keys())
    w.writeheader()
    for i in d:
        w.writerow(i)

得到你

a,b
1,2
3,4