Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3f7a948

Browse files
author
Skip Montanaro
committed
**kwds arg was missing from __init__ for Dict{Reader,Writer} classes.
will backport.
1 parent 60e868a commit 3f7a948

3 files changed

Lines changed: 14 additions & 4 deletions

File tree

Lib/csv.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,11 @@ class excel_tab(excel):
9393

9494
class DictReader:
9595
def __init__(self, f, fieldnames, restkey=None, restval=None,
96-
dialect="excel", *args):
96+
dialect="excel", *args, **kwds):
9797
self.fieldnames = fieldnames # list of keys for the dict
9898
self.restkey = restkey # key to catch long rows
9999
self.restval = restval # default value for short rows
100-
self.reader = reader(f, dialect, *args)
100+
self.reader = reader(f, dialect, *args, **kwds)
101101

102102
def __iter__(self):
103103
return self
@@ -122,15 +122,15 @@ def next(self):
122122

123123
class DictWriter:
124124
def __init__(self, f, fieldnames, restval="", extrasaction="raise",
125-
dialect="excel", *args):
125+
dialect="excel", *args, **kwds):
126126
self.fieldnames = fieldnames # list of keys for the dict
127127
self.restval = restval # for writing short dicts
128128
if extrasaction.lower() not in ("raise", "ignore"):
129129
raise ValueError, \
130130
("extrasaction (%s) must be 'raise' or 'ignore'" %
131131
extrasaction)
132132
self.extrasaction = extrasaction
133-
self.writer = writer(f, dialect, *args)
133+
self.writer = writer(f, dialect, *args, **kwds)
134134

135135
def _dict_to_list(self, rowdict):
136136
if self.extrasaction == "raise":

Lib/test/test_csv.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,13 @@ def test_read_with_blanks(self):
447447
self.assertEqual(reader.next(), {"1": '1', "2": '2', "3": 'abc',
448448
"4": '4', "5": '5', "6": '6'})
449449

450+
def test_read_semi_sep(self):
451+
reader = csv.DictReader(["1;2;abc;4;5;6\r\n"],
452+
fieldnames="1 2 3 4 5 6".split(),
453+
delimiter=';')
454+
self.assertEqual(reader.next(), {"1": '1', "2": '2', "3": 'abc',
455+
"4": '4', "5": '5', "6": '6'})
456+
450457
class TestArrayWrites(unittest.TestCase):
451458
def test_int_write(self):
452459
import array

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ Extension modules
3333
Library
3434
-------
3535

36+
- The csv module's DictReader and DictWriter classes now accept keyword
37+
arguments. This was an omission in the initial implementation.
38+
3639
- The email package handles some RFC 2231 parameters with missing
3740
CHARSET fields better. It also includes a patch to parameter
3841
parsing when semicolons appear inside quotes.

0 commit comments

Comments
 (0)