[Tutor] CSV file processing...

Eric Walstad eric at ericwalstad.com
Fri Mar 21 17:01:31 CET 2008


Hey Spencer,

Spencer Parker wrote:
> This is why I should not be allowed to write emails at the end of the 
> day.  At least ones that need deep explanation.  Let's try this a second 
> time.
Thanks, this looks better, but...


> This is what I have now...
*What isn't working* the way you want?  Traceback?  I'll guess that you 
don't want to have to hardcode the columns for a fixed number of virtual 
machine data into your sql string...


> try:
>     co = db.cursor()
>     csv_data = csv.reader(file('output.txt','r'))
> 
>     for row in csv_data: print row
>     co.execute("""
>         INSERT INTO stats (Hostname, Time, Arch, PhysicalCPU, Count, 
> Running, Blocked, Paused, Shutdown, Shutoff, Crashed, Active, Inactive, 
> PCPU, TotalMemory, Totalguestmemory, TotalCPUtime, DomainID, Domainname, 
> CPUTime, PGCPU, RDRQ, WRRQ, RXBY, TXBY)
>         VALUES 
> (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);
>             """,row)
> 
>     co.close()
Huh?  I was expecting to see 27 fields (20 for the host machine and 7 
for the virtual machine), you have 25 above.  Yes, a traceback or 
explanation of what's going wrong would be helpful.

Other things I'd recommend are:

1. I'm pretty sure that your 'row' above is a list of values. 
Investigate Python's list slicing operator[1] that other responses to 
your first email have used.  Doing so will help you understand...

2. Kent's response to your first email looks great.  Reread it and I 
think you'll find it does what you want (handle a variable number of 
virtual machines and their data).  See also: the range function and it's 
'step' argument[2].

3. Nice that you are sending the 'row' list to the database adapter and 
letting it escape the values.  In your case I don't think you have to 
worry about SQL injection, but it's a good habit to get into if you ever 
need to stuff end-user data into a database.

hth,

Eric.
[1] 
http://www.diveintopython.org/native_data_types/lists.html#odbchelper.list.3.1
[2] http://docs.python.org/tut/node6.html#SECTION006300000000000000000


More information about the Tutor mailing list