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