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
Post a Comment