From 7424dd359c9ffcd9a2b866f62fafda6d3a99b4b1 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Wed, 27 Oct 2010 07:27:06 +0000 Subject: #5975: add unix_dialect to csv module. --- Doc/library/csv.rst | 9 +++++++++ Lib/csv.py | 12 +++++++++++- Lib/test/test_csv.py | 9 +++++++++ Misc/NEWS | 4 +++- 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/Doc/library/csv.rst b/Doc/library/csv.rst index 8ca1741..ea18349 100644 --- a/Doc/library/csv.rst +++ b/Doc/library/csv.rst @@ -187,6 +187,15 @@ The :mod:`csv` module defines the following classes: TAB-delimited file. It is registered with the dialect name ``'excel-tab'``. +.. class:: unix_dialect() + + The :class:`unix_dialect` class defines the usual properties of a CSV file + generated on UNIX systems, i.e. using ``'\n'`` as line terminator and quoting + all fields. It is registered with the dialect name ``'unix'``. + + .. versionadded:: 3.2 + + .. class:: Sniffer() The :class:`Sniffer` class is used to deduce the format of a CSV file. diff --git a/Lib/csv.py b/Lib/csv.py index 5ae5a73..e0f47e8 100644 --- a/Lib/csv.py +++ b/Lib/csv.py @@ -20,7 +20,7 @@ __all__ = [ "QUOTE_MINIMAL", "QUOTE_ALL", "QUOTE_NONNUMERIC", "QUOTE_NONE", "unregister_dialect", "__version__", "DictReader", "DictWriter" ] class Dialect: - """Describe an Excel dialect. + """Describe a CSV dialect. This must be subclassed (see csv.excel). Valid attributes are: delimiter, quotechar, escapechar, doublequote, skipinitialspace, @@ -65,6 +65,16 @@ class excel_tab(excel): delimiter = '\t' register_dialect("excel-tab", excel_tab) +class unix_dialect(Dialect): + """Describe the usual properties of Unix-generated CSV files.""" + delimiter = ',' + quotechar = '"' + doublequote = True + skipinitialspace = False + lineterminator = '\n' + quoting = QUOTE_ALL +register_dialect("unix", unix_dialect) + class DictReader: def __init__(self, f, fieldnames=None, restkey=None, restval=None, diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py index 97800af..c3da185 100644 --- a/Lib/test/test_csv.py +++ b/Lib/test/test_csv.py @@ -515,6 +515,15 @@ class TestEscapedExcel(TestCsvBase): def test_read_escape_fieldsep(self): self.readerAssertEqual('abc\\,def\r\n', [['abc,def']]) +class TestDialectUnix(TestCsvBase): + dialect = 'unix' + + def test_simple_writer(self): + self.writerAssertEqual([[1, 'abc def', 'abc']], '"1","abc def","abc"\n') + + def test_simple_reader(self): + self.readerAssertEqual('"1","abc def","abc"\n', [['1', 'abc def', 'abc']]) + class QuotedEscapedExcel(csv.excel): quoting = csv.QUOTE_NONNUMERIC escapechar = '\\' diff --git a/Misc/NEWS b/Misc/NEWS index 8fb6203..d860a7a 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -51,7 +51,9 @@ Core and Builtins Library ------- -- #7761: telnetlib.interact failures on Windows fixed. +- Issue #5975: Add csv.unix_dialect class. + +- Issue #7761: telnetlib.interact failures on Windows fixed. - logging: Added style option to Formatter to allow %, {} or $-formatting. -- cgit v0.12