简体   繁体   English

将具有numpy数组的字典写入.csv

[英]Write dictionary with numpy arrays to .csv

I want to write resultfiles to .csv. 我想将结果文件写入.csv。 I prepared a simple test example. 我准备了一个简单的测试示例。

import numpy as np
data = {}
testdata = np.array([1,2,3,4,5])

data['set1'] = {'a': testdata, 'b': testdata, 'c': testdata}
data['set2'] = {'a2': testdata, 'b2': testdata, 'c2': testdata}
data['set3'] = {'a3': testdata, 'b3': testdata, 'c3': testdata}

It would be great to get a result file like this: 得到这样的结果文件将是很棒的:

在此处输入图片说明

Is there a simple way that you can recomment? 有一种简单的建议方法吗?

You can collect headers and rows in separate data structures and then use csv module to write everything to an excel sheet. 您可以在单独的数据结构中收集标题和行,然后使用csv模块将所有内容写入Excel工作表。 Also, the data dict needs to be converted to OrderedDict to maintain order of sequence. 同样, data字典需要转换为OrderedDict以保持顺序。

SourceCode 源代码

import numpy as np
import csv
from collections import OrderedDict
from itertools import chain


data = {}

testdata = np.array([1,2,3,4,5])
data = OrderedDict(data)


a = {'a': testdata, 'b': testdata, 'c': testdata}
b = {'a2': testdata, 'b2': testdata, 'c2': testdata}
c = {'a3': testdata, 'b3': testdata, 'c3': testdata}

#covert inner dict to OrderedDict
data['set1'] = OrderedDict(sorted(a.items(), key=lambda x:x[0]))
data['set2'] = OrderedDict(sorted(b.items(), key=lambda x:x[0]))
data['set3'] = OrderedDict(sorted(c.items(), key=lambda x:x[0]))  

#collect second header
header2 = [data.get(k).keys() for k in data.keys()]

#get number of repetations for header1
header1_size = len(header2[0])

#get header1
header1 = sorted((data.keys())*header1_size)

#flatten list of list of header2
header2 = list(chain.from_iterable(header2))

#get rows from data dict
rows = zip(*[v2 for k1,v1 in data.items() for k2,v2 in v1.items() ]) 

#write header1,header2 and rows to excel /csv
with open('csvfile.csv','wb') as ofile:               
    wr = csv.writer(ofile, dialect='excel')
    wr.writerow(header1)
    wr.writerow(header2)
    wr.writerows(rows)

csvfile csvfile
在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM