[issue2078] CSV Sniffer does not function properly on single column .csv files

Jean-Philippe Laverdure report at bugs.python.org
Thu Mar 27 16:19:38 CET 2008

Jean-Philippe Laverdure <jp.laverdure at gmail.com> added the comment:

Hello and sorry for the late reply.

Wolfgang: sorry about my misuse of the csv.DictReader constructor, that 
was a mistake on my part. However, it still is not functionning as I
think it should/could.  Look at this:

Using this content:

and this piece of code:
f = open(sys.argv[-1], 'r')
dialect = csv.Sniffer().sniff(f.readline())
reader = csv.DictReader(f, dialect=dialect)
for line in reader:
    print line

I get this result:
{'Sequen': 'AAGINRDSL', 'e': None}
{'Sequen': 'AAIANHQVL', 'e': None}

When I really should be getting this:
{'Sequence': 'AAGINRDSL'}
{'Sequence': 'AAIANHQVL'}

The fact is this code is in use in an application where users can submit
a .csv file produced by Excel for treatment.  The file must contain a
"Sequence" column since that is what the treatment is run on. Now I had
to make the following changes to my code to account for the fact that
some users submit a single column file (since only the "Sequence" column
is required for treatment):

f = open(sys.argv[-1], 'r')
    dialect = csv.Sniffer().sniff(f.readline(), [',', '\t'])
    reader = csv.DictReader(f, dialect=dialect)
    print '>>>caught csv sniff() exception'
    reader = csv.DictReader(f)
for line in reader:
    Do what I need to do

Which really feels like a patched use of a buggy implementation of the
Sniffer class

I understand the issues raised by Skip in regards to figuring out a
delimiter at all costs...  But really, the Sniffer class should work
apropriately when a single column .csv file is submitted

Tracker <report at bugs.python.org>

More information about the Python-bugs-list mailing list