diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2015-03-30 06:09:54 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2015-03-30 06:09:54 (GMT) |
commit | 7901b48a1f89b9bfa9d111ae3725400b466a9baa (patch) | |
tree | 4cebbcaeeb7b1f29f5440c7762f55bf3a57c0c54 /Lib | |
parent | a695f83f0de060a77352174be8a5c6f6500ab98a (diff) | |
download | cpython-7901b48a1f89b9bfa9d111ae3725400b466a9baa.zip cpython-7901b48a1f89b9bfa9d111ae3725400b466a9baa.tar.gz cpython-7901b48a1f89b9bfa9d111ae3725400b466a9baa.tar.bz2 |
Issue #23171: csv.Writer.writerow() now supports arbitrary iterables.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/csv.py | 7 | ||||
-rw-r--r-- | Lib/test/test_csv.py | 8 |
2 files changed, 10 insertions, 5 deletions
@@ -147,16 +147,13 @@ class DictWriter: if wrong_fields: raise ValueError("dict contains fields not in fieldnames: " + ", ".join([repr(x) for x in wrong_fields])) - return [rowdict.get(key, self.restval) for key in self.fieldnames] + return (rowdict.get(key, self.restval) for key in self.fieldnames) def writerow(self, rowdict): return self.writer.writerow(self._dict_to_list(rowdict)) def writerows(self, rowdicts): - rows = [] - for rowdict in rowdicts: - rows.append(self._dict_to_list(rowdict)) - return self.writer.writerows(rows) + return self.writer.writerows(map(self._dict_to_list, rowdicts)) # Guard Sniffer's type checking against builds that exclude complex() try: diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py index 41ef790..7be3cc3 100644 --- a/Lib/test/test_csv.py +++ b/Lib/test/test_csv.py @@ -186,6 +186,14 @@ class Test_Csv(unittest.TestCase): self._write_test(['a',1,'p,q'], 'a,1,p\\,q', escapechar='\\', quoting = csv.QUOTE_NONE) + def test_write_iterable(self): + self._write_test(iter(['a', 1, 'p,q']), 'a,1,"p,q"') + self._write_test(iter(['a', 1, None]), 'a,1,') + self._write_test(iter([]), '') + self._write_test(iter([None]), '""') + self._write_error_test(csv.Error, iter([None]), quoting=csv.QUOTE_NONE) + self._write_test(iter([None, None]), ',') + def test_writerows(self): class BrokenFile: def write(self, buf): |