Index: Lib/csv.py =================================================================== --- Lib/csv.py (revision 65223) +++ Lib/csv.py (working copy) @@ -77,15 +77,15 @@ self.reader = reader(f, dialect, *args, **kwds) self.dialect = dialect self.line_num = 0 + if self.fieldnames is None: + # First row of the file is taken to be the column headers. + self.fieldnames = self.reader.next() def __iter__(self): return self def next(self): row = self.reader.next() - if self.fieldnames is None: - self.fieldnames = row - row = self.reader.next() self.line_num = self.reader.line_num # unlike the basic reader, we prefer not to return blanks, Index: Lib/test/test_csv.py =================================================================== --- Lib/test/test_csv.py (revision 65223) +++ Lib/test/test_csv.py (working copy) @@ -611,6 +611,7 @@ fileobj.write("f1,f2,f3\r\n1,2,abc\r\n") fileobj.seek(0) reader = csv.DictReader(fileobj) + self.assertEqual(reader.fieldnames, ["f1", "f2", "f3"]) self.assertEqual(reader.next(), {"f1": '1', "f2": '2', "f3": 'abc'}) finally: fileobj.close()