Here are a few minor points about your current code:
- It is a bad idea to use
file as a variable name, as this obscures the built-in type. - You can close file objects automatically using the
with syntax. - Don't want to add an extra column to the title bar, called something like
Filename , rather than just omitting the column in the first row? - If your file names have commas (or, what is still possible, new lines), you need to make sure that the file name is specified - just adding it will not work.
The latter consideration would appeal to me instead to use the csv module, which will deal with quoting and fuzzy for you. For example, you can try something like the following code:
import glob import csv import sys for filename in glob.glob(sys.argv[1]): data = [] with open(filename) as finput: for i, row in enumerate(csv.reader(finput)): to_append = "Filename" if i == 0 else filename data.append(row+[to_append]) with open(filename,'wb') as foutput: writer = csv.writer(foutput) for row in data: writer.writerow(row)
This may indicate the data a little differently than your input file, so you can play with the quote options for csv.reader and csv.writer described in the documentation for the csv module .
As another point, you may have good reasons for accepting glob as a parameter, not just files on the command line, but this is a bit surprising - you will have to name your script as ./whatever.py '*.csv' and not just ./whatever.py *.csv . Instead, you can simply do:
for filename in sys.argv[1:]:
... and let the shell expand your globe before the script knows anything about it.
Last: the current approach you take is a bit dangerous because if something fails while accessing the same file name, you will lose data. The standard way to avoid this is to write to a temporary file instead, and if it was successful, rename the temporary file on top of the original. So you can rewrite all of this as:
import csv import sys import tempfile import shutil for filename in sys.argv[1:]: tmp = tempfile.NamedTemporaryFile(delete=False) with open(filename) as finput: with open(tmp.name,'wb') as ftmp: writer = csv.writer(ftmp) for i, row in enumerate(csv.reader(finput)): to_append = "Filename" if i == 0 else filename writer.writerow(row+[to_append]) shutil.move(tmp.name,filename)