diff options
Diffstat (limited to 'Lib/csv.py')
| -rw-r--r-- | Lib/csv.py | 22 | 
1 files changed, 18 insertions, 4 deletions
@@ -68,7 +68,7 @@ register_dialect("excel-tab", excel_tab)  class DictReader:      def __init__(self, f, fieldnames=None, restkey=None, restval=None,                   dialect="excel", *args, **kwds): -        self.fieldnames = fieldnames    # list of keys for the dict +        self._fieldnames = fieldnames   # list of keys for the dict          self.restkey = restkey          # key to catch long rows          self.restval = restval          # default value for short rows          self.reader = reader(f, dialect, *args, **kwds) @@ -78,11 +78,25 @@ class DictReader:      def __iter__(self):          return self +    @property +    def fieldnames(self): +        if self._fieldnames is None: +            try: +                self._fieldnames = next(self.reader) +            except StopIteration: +                pass +        self.line_num = self.reader.line_num +        return self._fieldnames + +    @fieldnames.setter +    def fieldnames(self, value): +        self._fieldnames = value +      def __next__(self): +        if self.line_num == 0: +            # Used only for its side effect. +            self.fieldnames          row = next(self.reader) -        if self.fieldnames is None: -            self.fieldnames = row -            row = next(self.reader)          self.line_num = self.reader.line_num          # unlike the basic reader, we prefer not to return blanks,  | 
