CSV Dialect Example Requested - NEWBIE
Skip Montanaro
skip at pobox.com
Tue Oct 28 11:10:43 EST 2003
Doug> import csv
Doug> import csv
Doug> class dialect(csv.dialect):
Doug> delimiter = '|'
Doug> skipinitialspace = True
Doug> quotechar = '"'
Doug> doublequote = True
Doug> reader = csv.reader(file("c:\\Temp\\test.csv"), dialect=dialect)
Doug> for row in reader:
Doug> print row
Doug,
As others pointed out you want to subclass csv.Dialect. It's probably
easier to subclass csv.excel instead though. csv.Dialect is a base class
which doesn't define any of the required attributes. If you subclass
csv.Dialect using just the attributes you indicated, you will get:
>>> class dialect(csv.Dialect):
... delimiter = '|'
... skipinitialspace = True
... quotechar = '"'
... doublequote = True
...
>>> reader = csv.reader(file("support-list.csv"), dialect=dialect)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/Users/skip/local/lib/python2.4/csv.py", line 39, in __init__
raise Error, "Dialect did not validate: %s" % ", ".join(errors)
_csv.Error: Dialect did not validate: lineterminator not set, quoting parameter not set
because csv.Dialect doesn't define a lineterminator attribute. By
subclassing csv.excel you start out with a valid dialect and only need to
override the attributes which differ.
Here's a working example:
>>> class dialect(csv.excel):
... delimiter = '|'
... skipinitialspace = True
... quotechar = '"'
... doublequote = True
...
>>> reader = csv.reader(file("support-list.csv"), dialect=dialect)
>>> for row in reader:
... print row
...
['"', '1', '2', '3', '4']
['"Happy Days"', 'a', 'b', 'c', '4']
which uses
""""|1|2|3|"4"
"""Happy Days"""|a|b|c|"4"
as the input file.
Here's an example of registering a dialect with the module:
>>> csv.register_dialect("<wink>", dialect)
>>> reader = csv.reader(file("support-list.csv"), dialect="<wink>")
>>> for row in reader:
... print row
...
['"', '1', '2', '3', '4']
['"Happy Days"', 'a', 'b', 'c', '4']
Skip
More information about the Python-list
mailing list