Frank Millman <[EMAIL PROTECTED]> wrote: > Benji York wrote: > > Frank Millman wrote: > > > reader = csv.reader(open('trans.csv', 'rb')) > > > rows = [] > > > for row in reader: > > > rows.append(row) > > > > Why do you create a list of rows instead of just iterating over the > > reader directly? > > -- > > Benji York > > A - didn't think of it - good idea > > B - can't always do it - > B1 - if the file is not sorted, I have to sort the rows first > B2 - if I need to update the file, I can modify the rows in place, and > then call > csv.writer(open('trans.csv','wb')).writerows(rows) > > BTW, I know that B2 is simplistic - to be safe I should rename, then > write, then unlink. I will do that for production code. > > BTW2, an alternative to B2 is > reader = csv.reader(open('trans.csv', 'rb')) > newtrans = open('newtrans.csv','wb') > writer = csv.writer(newtrans) > for row in reader: > [process and modify row] > writer.writerow(row) > newtrans.close() > [unlink and rename] > > Could be useful if the file is large. Food for thought.
BTW, if and when you do need a list for some other purpose, rows = list(reader) may be slightly better than the for/append loop; and if you need a sorted list, perhaps rows = sorted(reader) similarly. Alex -- http://mail.python.org/mailman/listinfo/python-list