I want to write resultfiles to .csv. I prepared a simple test example.
import numpy as np
data = {}
testdata = np.array([1,2,3,4,5])
data[\'set1\'] = {\'a\': tes
You can collect headers and rows in separate data structures and then use csv
module to write everything to an excel sheet. Also, the data
dict needs to be converted to OrderedDict
to maintain order of sequence.
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