~pythonregexp2.7/python/issue2636-11

« back to all changes in this revision

Viewing changes to Lib/csv.py

  • Committer: Jeffrey C. "The TimeHorse" Jacobs
  • Date: 2008-09-21 17:53:26 UTC
  • mfrom: (39025.1.14 Regexp-2.7)
  • Revision ID: darklord@timehorse.com-20080921175326-92vaej2hc3yuecxb
Merged in changes from the core Regexp branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
"""
5
5
 
6
6
import re
 
7
from functools import reduce
7
8
from _csv import Error, __version__, writer, reader, register_dialect, \
8
9
                 unregister_dialect, get_dialect, list_dialects, \
9
10
                 field_size_limit, \
17
18
    from StringIO import StringIO
18
19
 
19
20
__all__ = [ "QUOTE_MINIMAL", "QUOTE_ALL", "QUOTE_NONNUMERIC", "QUOTE_NONE",
20
 
            "Error", "Dialect", "excel", "excel_tab", "reader", "writer",
 
21
            "Error", "Dialect", "__doc__", "excel", "excel_tab",
 
22
            "field_size_limit", "reader", "writer",
21
23
            "register_dialect", "get_dialect", "list_dialects", "Sniffer",
22
24
            "unregister_dialect", "__version__", "DictReader", "DictWriter" ]
23
25
 
71
73
class DictReader:
72
74
    def __init__(self, f, fieldnames=None, restkey=None, restval=None,
73
75
                 dialect="excel", *args, **kwds):
74
 
        self.fieldnames = fieldnames    # list of keys for the dict
 
76
        self._fieldnames = fieldnames   # list of keys for the dict
75
77
        self.restkey = restkey          # key to catch long rows
76
78
        self.restval = restval          # default value for short rows
77
79
        self.reader = reader(f, dialect, *args, **kwds)
81
83
    def __iter__(self):
82
84
        return self
83
85
 
 
86
    @property
 
87
    def fieldnames(self):
 
88
        if self._fieldnames is None:
 
89
            try:
 
90
                self._fieldnames = self.reader.next()
 
91
            except StopIteration:
 
92
                pass
 
93
        self.line_num = self.reader.line_num
 
94
        return self._fieldnames
 
95
 
 
96
    @fieldnames.setter
 
97
    def fieldnames(self, value):
 
98
        self._fieldnames = value
 
99
 
84
100
    def next(self):
 
101
        if self.line_num == 0:
 
102
            # Used only for its side effect.
 
103
            self.fieldnames
85
104
        row = self.reader.next()
86
 
        if self.fieldnames is None:
87
 
            self.fieldnames = row
88
 
            row = self.reader.next()
89
105
        self.line_num = self.reader.line_num
90
106
 
91
107
        # unlike the basic reader, we prefer not to return blanks,