handa...@gmail.com wrote: > I am trying to split a specific column of csv into multiple column and > then appending the split values at the end of each row. > > `enter code here` > ------------------------------------------------ > import csv > fOpen1=open('Meta_D1.txt') > > reader=csv.reader(fOpen1) > mylist=[elem[1].split(',') for elem in reader] > mylist1=[] > > for elem in mylist1: > mylist1.append(elem) > > > #writing to a csv file > with open('out1.csv', 'wb') as fp: > myf = csv.writer(fp, delimiter=',') > myf.writerows(mylist1) > > --------------------------------------------------- > Here is the link to file I am working on 2 column. > https://spaces.hightail.com/space/4hFTj > > Can someone guide me further?
Use helper functions to process one row and the column you want to split: import csv def split_column(column): """ >>> split_column("foo,bar,baz") ['foo', 'bar', 'baz'] """ return column.split(",") def process_row(row): """ >>> process_row(["foo", "one,two,three", "bar"]) ['foo', 'one,two,three', 'bar', 'one', 'two', 'three'] """ new_row = row + split_column(row[1]) return new_row def convert_csv(infile, outfile): with open(infile) as instream: rows = csv.reader(instream) with open(outfile, "w") as outstream: writer = csv.writer(outstream, delimiter=",") writer.writerows(process_row(row) for row in rows) if __name__ == "__main__": convert_csv(infile="infile.csv", outfile="outfile.csv") That makes it easy to identify (and fix) the parts that do not work to your satisfaction. Let's say you want to remove the original unsplit second column. You know you only have to modify process_row(). You change the doctest first def process_row(row): """ >>> process_row(["foo", "one,two,three", "bar"]) ['foo', 'bar', 'one', 'two', 'three'] """ new_row = row + split_column(row[1]) return new_row and verify that it fails: $ python3 -m doctest split_column2.py ********************************************************************** File "/somewhere/split_column2.py", line 12, in split_column2.process_row Failed example: process_row(["foo", "one,two,three", "bar"]) Expected: ['foo', 'bar', 'one', 'two', 'three'] Got: ['foo', 'one,two,three', 'bar', 'one', 'two', 'three'] ********************************************************************** 1 items had failures: 1 of 1 in split_column2.process_row ***Test Failed*** 1 failures. Then fix the function until you get $ python3 -m doctest split_column2.py If you don't trust the "no output means everything is OK" philosophy use the --verbose flag: $ python3 -m doctest --verbose split_column2.py Trying: process_row(["foo", "one,two,three", "bar"]) Expecting: ['foo', 'bar', 'one', 'two', 'three'] ok Trying: split_column("foo,bar,baz") Expecting: ['foo', 'bar', 'baz'] ok 2 items had no tests: split_column2 split_column2.convert_csv 2 items passed all tests: 1 tests in split_column2.process_row 1 tests in split_column2.split_column 2 tests in 4 items. 2 passed and 0 failed. Test passed. -- https://mail.python.org/mailman/listinfo/python-list