On 26/01/12 23:20, amt wrote:

input = open(from_file)
indata = input.read()
 ...

output = open(to_file, 'w')
output.write(indata)

print "Alright, all done."

output.close()
input.close()


I don't get it. If you don't close input and output it works exactly
the same as if you would close them, so why do you have to do
output.close() and input.close()?

In this case it will work the same 99.9% of the time because when your program closes Python will kill all the file objects that you created and in the process the files will get written to the disk. However, to understand why you need to call close() in the general case you need to understand that when you do a write to a file the OS does not immediately write the data to the disk (it would be too slow). Instead it writes it to a holding area in memory (called a buffer) and then, every so often, it copies the buffer out to the real file. When you call close() one of the things that happens is that the buffer gets told to write to disk, even if it's not full yet. If you don't call close you can wind up with data missing from the end of your files.

The other thing that close does is releases the memory and other OS resources that are allocated to the file when you open it. Depending on the OS there may be limits to how many files can be open at once. Also the file may be locked until it is closed preventing other programs from accessing it. So in general, whenever you finish using a file, you should close it as a good habit... In fact it's a good idea to use a try/finally construct to guarantee that the file gets closed, especially if you are writing to it:

try:
   foo = open(myFiule,'w')
   # do stuff to foo
finally:
   foo.close()

The only exception to this is if you open the file like this:

with open(myfile) as aFile:
     # use aFile

This construct specifically guarantees to close the file for you at the end of the block.

It's one of those things that catches beginners out regularly because nine times out of ten not closing the file will seem to work fine then, once in a while, it fails and data gets corrupted.

--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to