Python: CSV write by column rather than row
Python: CSV write by column rather than row
The reason csv
doesnt support that is because variable-length lines are not really supported on most filesystems. What you should do instead is collect all the data in lists, then call zip()
on them to transpose them after.
>>> l = [(Result_1, Result_2, Result_3, Result_4), (1, 2, 3, 4), (5, 6, 7, 8)]
>>> zip(*l)
[(Result_1, 1, 5), (Result_2, 2, 6), (Result_3, 3, 7), (Result_4, 4, 8)]
wr.writerow(item) #column by column
wr.writerows(item) #row by row
This is quite simple if your goal is just to write the output column by column.
If your item is a list:
yourList = []
with open(yourNewFileName.csv, w, ) as myfile:
wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
for word in yourList:
wr.writerow([word])
Python: CSV write by column rather than row
Updating lines in place in a file is not supported on most file system (a line in a file is just some data that ends with newline, the next line start just after that).
As I see it you have two options:
- Have your data generating loops be generators, this way they wont consume a lot of memory – youll get data for each row just in time
- Use a database (sqlite?) and update the rows there. When youre done – export to CSV
Small example for the first method:
from itertools import islice, izip, count
print list(islice(izip(count(1), count(2), count(3)), 10))
This will print
[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7), (6, 7, 8), (7, 8, 9), (8, 9, 10), (9, 10, 11), (10, 11, 12)]
even though count
generate an infinite sequence of numbers