[Tutor] csv manipulation

Serdar Tumgoren zstumgoren at gmail.com
Fri Oct 31 14:29:54 CET 2008


Hey everyone,

I spent a day trying to adapt Mr. Gailer's simple and elegant code to the
csv version suggested by Mr. Johnson, but I can't seem to get it working.

I adapted the example to my particular use case, but the problem occurs
regardless of the dataset used: Namely, when I loop through the items in the
list of fields and use "writerows" to print to a csv file, the loop splits
every

So my starting dataset:

"White, Barry","brave","tall","52"
"Rick Davis","confident","average","48"
"Jane Doe","pretty","short","40","New York"
"Smith, Janet","organized","65","San Francisco","CA"
"John Quincy","lazy","tall","35"
"Mike Leeds","curious","38"

...looks like this:

W,h,i,t,e,",", ,B,a,r,r,y
b,r,a,v,e
W,h,i,t,e,",", ,B,a,r,r,y
t,a,l,l
W,h,i,t,e,",", ,B,a,r,r,y
5,2
R,i,c,k, ,D,a,v,i,s
c,o,n,f,i,d,e,n,t
R,i,c,k, ,D,a,v,i,s
a,v,e,r,a,g,e
R,i,c,k, ,D,a,v,i,s
4,8
<snip>

...instead of the desired result:

White, Barry    brave
White, Barry    tall
White, Barry    52
Rick Davis      confident
Rick Davis      average
Rick Davis      48
Jane Doe        pretty
Jane Doe        short
<snip>

When print to the shell, however, I get the results I'm looking for.


Below is my code. Can someone tell me how I'm botching the use of the
"writerows" method? Also, on a separate note, is it possible and necessary
to close the input and output files when using csv module? I keep getting a
"module has no close method" error when I try to close the files...

 1 #!/usr/bin/python
 2
 3 import csv
 4
 5
 6 reader = csv.reader(open('/path/to/infile2.txt',    'rb'))
 7
 8
 9 writer = csv.writer(open('/path/to/outfile2.txt',    'wb'))
10
11 #loop through fields in row
12 for line in reader:
13     #name is the first field in row
14     name = line[0]
15     #create list of person's attributes
16     attributes = line[1:]
17
18     for characteristic in attributes:
19         #print to shell for testing
20         print name + "\t" + characteristic
21
22         #write rows to file
23         writer.writerows((name,characteristic))




On Wed, Oct 29, 2008 at 1:31 PM, Kent Johnson <kent37 at tds.net> wrote:

> On Wed, Oct 29, 2008 at 11:28 AM, bob gailer <bgailer at gmail.com> wrote:
> > qsqgeekyogdty at tiscali.co.uk wrote:
> >>
> >> hello,
> >> i have the follwoing csv file:
> >>
> >> "Berat","Berat","Kuçovë","Skrapar"
>
> > There is a csv module, but for something this simple the following will
> > suffice:
>
> as long as none of the data fields include a comma...given that the
> equivalent program using csv is barely longer than your example, and
> more robust, it seems worth using to me. For example (untested):
>
> import csv
>
> inputFile= open(path-to-the-input-file, 'rb')
> reader = csv.reader(inputFile)
> outputFile = open(path-to-the-output-file, 'wb')
> writer = csv.writer(outputFile)
>
> for line in reader:
>  region = line [0]
>  for district in line[1:]:
>   writer.write((region, district))
> inputFile.close()
> outputFile.close()
>
> Kent
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20081031/d3c3f4f9/attachment.htm>


More information about the Tutor mailing list