problems with CSV module

Neil Cerutti neilc at norwich.edu
Thu Jun 3 15:14:21 EDT 2010


On 2010-06-03, Carlos Grohmann <carlos.grohmann at gmail.com> wrote:
> Hi all, I'm using csv to read text files, and its working fine, except
> in two cases:
>
> - when there is only one line of text (data) in the file
> - when there is a blank line after the last data line
>
> this is the kind of data:
>
> 45 67 89
> 23 45 06
> 12 34 67
> ...

That data doesn't appear to be csv worthy. Why not use str.split
or str.partition?

> and this is the function:
>
> def getData(paths):
>     """get data from file and create lists with values and column
> names."""
>
>     filehandle = paths#[i] # filehandle = os.path.join(dirname,
> filename)
>     csvfile = open(filehandle,'r') # Open the file and read the

In Python 2.6 and earlier, you need to open the file in binary
mode.

In Python 3.0 and later, you need to open the file with a mystic
incantation:

   csvfile = open(filehandle, newline='')

>     sample = csvfile.read( 1024 )# Grab a sample
>     csvfile.seek( 0 )
>     dialect = csv.Sniffer().sniff(sample) # Check for file format with
> sniffer.
>     csvfile = csv.reader( csvfile, dialect )

Use:

   csvfile = csv.reader(csvfile, dialect=dialect)

dialect is a keyword argument.

>     if csv.Sniffer().has_header( sample ): #if there is a header
>         colnames = csvfile.next() # label columns from first line
>         datalist = list( csvfile ) # append data to a list

Do you really need to use the Sniffer? You'll probably be better
off

-- 
Neil Cerutti
*** You found a dead moose-rat. You sell the hide for $200. ***



More information about the Python-list mailing list