I have several CSV files that look like this:
Input Name Code blackberry 1 wineberry 2 rasberry 1 blueberry 1 mulberry 2
I would like to add a new column to all CSV files so that it would look like this:
Output Name Code Berry blackberry 1 blackberry wineberry 2 wineberry rasberry 1 rasberry blueberry 1 blueberry mulberry 2 mulberry
The script I have so far is this:
import csv with open(input.csv,'r') as csvinput: with open(output.csv, 'w') as csvoutput: writer = csv.writer(csvoutput) for row in csv.reader(csvinput): writer.writerow(row+['Berry'])
But in the output, the script skips every line and the new column has only Berry in it:
Output Name Code Berry blackberry 1 Berry wineberry 2 Berry rasberry 1 Berry blueberry 1 Berry mulberry 2 Berry
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) ... print item ... ['blackberry', '1', 'blackberry'] ['wineberry', '2', 'wineberry'] ['rasberry', '1', 'rasberry'] ['blueberry', '1', 'blueberry'] ['mulberry', '2', 'mulberry'] >>>
Edit, note in py3k you must use
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) all.append(row) writer.writerows(all)
csv.writer. By default it is set to
'\r\n'and this is why you have double spacing.
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.
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:
I'm surprised no one suggested Pandas. Although using a set of dependencies like Pandas might seem more heavy-handed than is necessary for such an easy task, it produces a very short script and Pandas is a great library for doing all sorts of CSV (and really all data types) data manipulation. Can't argue with 4 lines of code:
import pandas as pd csv_input = pd.read_csv('input.csv') csv_input['Berries'] = csv_input['Name'] csv_input.to_csv('output.csv', index=False)
Check out Pandas Website for more information!
Name,Code,Berries blackberry,1,blackberry wineberry,2,wineberry rasberry,1,rasberry blueberry,1,blueberry mulberry,2,mulberry