Strange Behavior: csv module & IDLE
John Machin
sjmachin at lexicon.net
Fri Dec 28 21:43:05 EST 2007
On Dec 29, 1:12 pm, t_rectenwald <t.rectenw... at gmail.com> wrote:
> I've noticed an oddity when running a program, using the csv module,
> within IDLE. I'm new to Python so am confused by what is happening.
> Here is what I'm doing:
>
> 1) Open the IDLE Shell.
> 2) Select File | Open...
> 3) Choose my file, foo.py, opening it in a window.
> 4) From that window, I hit F5 to run the module.
>
> Within the program, the snippet where I use the csv module is below:
Forget snippet, show us a *whole* "program". Cut out the database
stuff; just use some simple made-up value for "rows".
> ==============================
> csvfile = open('foo.csv', 'w')
Always use 'wb' -- not the cause of the current problem but it will
bite you later.
> writer = csv.writer(csvfile)
>
> for row in rows:
> writer.writerow(row[0:3])
>
Adding
del writer
may help
> csvfile.close
The above statement does nothing. You meant csvfile.close(), I
presume.
> ==============================
>
> The rows object is returned from a database query and is a list of
> tuples. Now here is the strange thing. If I run this program
> directly from the command line, i.e.,
>
> D:\test> D:\python25\python foo.py
>
> It runs fine, foo.csv is created and all is well. However, when I run
> it through the IDLE shell as described above, the foo.csv file is
> created but remains empty at 0 bytes. When I try to delete the file,
> Windows says it is in use. The only way I can break out of this is by
> restarting the IDLE shell. In other words, it appears that the shell
> is hanging.
No it's not hanging, it's just that the file is still open; you
haven't closed it. It won't be closed until you exit IDLE.
>
> This will run through Task Scheduler, so shouldn't be a problem, but
> I'm worried that I'm coding this wrong for it to be acting this way
> under IDLE. Any help or explanation would be appreciated.
>
Do these things inside a function, so that the objects get garbage-
collected on exit.
More information about the Python-list
mailing list