CSV Parser and unusual (?) linesterminator - misunderstanding?

Tino Lange Tino.Lange at is-teledata.com
Fri Jan 20 09:52:36 CET 2006


Hi!

I'm trying to use the csv Parser included with Python. Field Delimiter is
"|", Line Delimiter is "#". Unfortunately it doesn't work as expected. The
parser seems to just ignore the 'lineterminator'?

Here's some example:

> $ cat test.py
> #! /usr/bin/env python
> 
> import sys, csv, cStringIO
> 
> class SpecialCSVDialect(csv.Dialect):
>     delimiter = '|'
>     lineterminator = '#'
>     quotechar = '"'
>     doublequote = True
>     skipinitialspace = False
>     quoting = csv.QUOTE_MINIMAL
> 
> csv.register_dialect("SpecialCSV", SpecialCSVDialect)
> 
> memfile = cStringIO.StringIO("1a|1b|1c|1d#2a|2b|2c|2d#3a|3b|3c|3d#")
> cfile = csv.reader(memfile, dialect="SpecialCSV")
> 
> while 1:
>   try:
>     data = cfile.next()
>   except csv.Error, (errmsg):
>     print >> sys.stderr, "SpecialCSVError '%s' - aborting...!" % (errmsg)
>     sys.exit()
>   except StopIteration:
>     break
>   print data

> $ ./test.py
> ['1a', '1b', '1c', '1d#2a', '2b', '2c', '2d#3a', '3b', '3c', '3d#']
> $

I would have been expecting that the parser returns three lines, i. e. 

> ['1a', '1b', '1c', '1d']
> ['2a', '2b', '2c', '2d']
> ['3a', '3b', '3c', '3d']

Any hints what I'm doing wrong here?

Thanks

Tino



More information about the Python-list mailing list