简体   繁体   中英

Write dictionary with numpy arrays to .csv

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': 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. 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
在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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