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