For example, my csv has columns as below:
ID, ID2, Date, Job No, Code
dicts do NOT maintain order.
However, the instance of
csv.DictReader that you're using (after you've read the first row!-) does have a
.fieldnames list of strings, which IS in order.
for rowdict in myReader: print ['%s:%s' % (f, rowdict[f]) for f in myReader.fieldnames]
will show you that the order is indeed maintained (in
.fieldnames of course, NEVER in the
dict -- that's intrinsically impossible in Python!-).
So, suppose you want to read
a.csv and write
b.csv with the same column order. Using plain reader and writer is too easy, so you want to use the Dict varieties instead;-). Well, one way is...:
import csv a = open('a.csv', 'r') b = open('b.csv', 'w') ra = csv.DictReader(a) wb = csv.DictWriter(b, None) for d in ra: if wb.fieldnames is None: # initialize and write b's headers dh = dict((h, h) for h in ra.fieldnames) wb.fieldnames = ra.fieldnames wb.writerow(dh) wb.writerow(d) b.close() a.close()
assuming you have headers in
a.csv (otherewise you can't use a DictReader on it) and want just the same headers in