How to add a new column to a CSV file?

This should give you an idea of what to do:

>>> v = open('C:/test/test.csv')
>>> r = csv.reader(v)
>>> row0 = r.next()
>>> row0.append('berry')
>>> print row0
['Name', 'Code', 'berry']
>>> for item in r:
...     item.append(item[0])
...     print item
...     
['blackberry', '1', 'blackberry']
['wineberry', '2', 'wineberry']
['rasberry', '1', 'rasberry']
['blueberry', '1', 'blueberry']
['mulberry', '2', 'mulberry']
>>> 

Edit, note in py3k you must use next(r)

Thanks for accepting the answer. Here you have a bonus (your working script):

import csv

with open('C:/test/test.csv','r') as csvinput:
    with open('C:/test/output.csv', 'w') as csvoutput:
        writer = csv.writer(csvoutput, lineterminator="\n")
        reader = csv.reader(csvinput)

        all = []
        row = next(reader)
        row.append('Berry')
        all.append(row)

        for row in reader:
            row.append(row[0])
            all.append(row)

        writer.writerows(all)

Please note

  1. the lineterminator parameter in csv.writer. By default it is
    set to '\r\n' and this is why you have double spacing.
  2. the use of a list to append all the lines and to write them in
    one shot with writerows. If your file is very, very big this
    probably is not a good idea (RAM) but for normal files I think it is
    faster because there is less I/O.
  3. As indicated in the comments to this post, note that instead of
    nesting the two with statements, you can do it in the same line:

    with open(‘C:/test/test.csv’,’r’) as csvinput, open(‘C:/test/output.csv’, ‘w’) as csvoutput:

Leave a Comment