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:

  1. 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
  2. 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

Leave a Reply

Your email address will not be published. Required fields are marked *