summaryrefslogtreecommitdiff
path: root/Lib/csv.py
diff options
context:
space:
mode:
authorSkip Montanaro <skip@pobox.com>2003-10-03 14:03:01 +0000
committerSkip Montanaro <skip@pobox.com>2003-10-03 14:03:01 +0000
commit8772f6a20ecb91366251f70b621583b0cf13fdd4 (patch)
treefc61d7209fc3c5b02773fd9724f44cdcd7e2ce37 /Lib/csv.py
parent9a15ee9915169a6331396f3b4a538831cc4fd774 (diff)
downloadcpython-8772f6a20ecb91366251f70b621583b0cf13fdd4.tar.gz
Make the fieldnames argument optional in the DictReader. If self.fieldnames
is None, the next row read is used as the fieldnames. In the common case, this means the programmer doesn't need to know the fieldnames ahead of time. The first row of the file will be used. In the uncommon case, this means the programmer can set the reader's fieldnames attribute to None at any time and have the next row read as the next set of fieldnames, so a csv file can contain several "sections", each with different fieldnames.
Diffstat (limited to 'Lib/csv.py')
-rw-r--r--Lib/csv.py6
1 files changed, 5 insertions, 1 deletions
diff --git a/Lib/csv.py b/Lib/csv.py
index 096badc7bb..f2389fd304 100644
--- a/Lib/csv.py
+++ b/Lib/csv.py
@@ -92,7 +92,7 @@ register_dialect("excel-tab", excel_tab)
class DictReader:
- def __init__(self, f, fieldnames, restkey=None, restval=None,
+ def __init__(self, f, fieldnames=None, restkey=None, restval=None,
dialect="excel", *args, **kwds):
self.fieldnames = fieldnames # list of keys for the dict
self.restkey = restkey # key to catch long rows
@@ -104,6 +104,10 @@ class DictReader:
def next(self):
row = self.reader.next()
+ if self.fieldnames is None:
+ self.fieldnames = row
+ row = self.reader.next()
+
# unlike the basic reader, we prefer not to return blanks,
# because we will typically wind up with a dict full of None
# values