Python script to turn input csv columns into output csv row values -


i have input csv like

email,trait1,trait2,trait3 foo@gmail,biz,baz,buzz bar@gmail,bizzy,bazzy,buzzy foobars@gmail,bizziest,bazziest,buzziest 

and need output format

indv,attrname,attrvalue,start,end foo@gmail,"trait1",biz,,, foo@gmail,"trait2",baz,baz,, foo@gmail,"trait3",buzz,,, 

for each row in input file need write row n-1 columns in input csv. start , end fields in output file can empty in cases.

i'm trying read in data using dictreader. i've been able read in data

import unicodecsv import os import codecs  open('test.csv') csvfile:     reader = unicodecsv.csv.dictreader(csvfile)     outfile = codecs.open("test-write", "w", "utf-8")     outfile.write("indv", "attr", "value", "start","end\n")     row in reader:         outfile.write([row['email'],"trait1",row['trait1'],'',''])         outfile.write([row['email'],"trait2",row['trait2'],row['trait2'],''])         outfile.write([row['email'],"trait3",row['trait3'],'','') 

which doesn't work. (i think need cast list string), , brittle i'm hardcoding column names each row. bigger issue data within loop isn't written "test-write". line outfile.write("indv", "attr", "value", "start","end\n") write out file. dictreader appropriate class use in case?

this uses unicodecsv.dictwriter , zip() function want, , code readable in opinion.

import unicodecsv import os import codecs  open('test.csv') infile, \      codecs.open('test-write.csv', 'w', 'utf-8') outfile:      reader = unicodecsv.dictreader(infile)     fieldnames = 'indv,attrname,attrvalue,start,end'.split(',')     writer = unicodecsv.dictwriter(outfile, fieldnames)     writer.writeheader()     row in reader:         email = row['email']         trait1, trait2, trait3 = row['trait1'], row['trait2'], row['trait3']         writer.writerows([  # writes 3 rows of output each row of input             dict(zip(fieldnames, [email, 'trait1', trait1])),             dict(zip(fieldnames, [email, 'trait2', trait2, trait2])),             dict(zip(fieldnames, [email, 'trait3', trait3]))]) 

here's contents of test-write.csv file produced example input csv file:

indv,attrname,attrvalue,start,end foo@gmail,trait1,biz,, foo@gmail,trait2,baz,baz, foo@gmail,trait3,buzz,, bar@gmail,trait1,bizzy,, bar@gmail,trait2,bazzy,bazzy, bar@gmail,trait3,buzzy,, foobars@gmail,trait1,bizziest,, foobars@gmail,trait2,bazziest,bazziest, foobars@gmail,trait3,buzziest,, 

Comments

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -