Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python close file descriptor question

I think this question is more of a "coding style" rather than technical issue.

Said I have a line of code:

buf = open('test.txt','r').readlines() ... 

Will the file descriptor automatically close, or will it stay in the memory? If the file descriptor is not closed, what is the prefer way to close it?

like image 965
Patrick Avatar asked Jan 05 '11 01:01

Patrick


People also ask

How do I close file descriptor?

close() closes a file descriptor, so that it no longer refers to any file and may be reused.

What is close () in Python?

Python File close() Method The close() method closes an open file. You should always close your files, in some cases, due to buffering, changes made to a file may not show until you close the file.

What happens if you don't close descriptor?

As long as your program is running, if you keep opening files without closing them, the most likely result is that you will run out of file descriptors/handles available for your process, and attempting to open more files will fail eventually.

How do you close a file after reading in Python?

The close() method of a file object flushes any unwritten information and closes the file object, after which no more writing can be done. Python automatically closes a file when the reference object of a file is reassigned to another file. It is a good practice to use the close() method to close a file.


1 Answers

If you assign the file object to a variable, you can explicitly close it using .close()

f = open('test.txt','r') buf = f.readlines() f.close() 

Alternatively (and more generally preferred), you can use the with keyword (Python 2.5 and greater) as mentioned in the Python docs:

It is good practice to use the with keyword when dealing with file objects. This has the advantage that the file is properly closed after its suite finishes, even if an exception is raised on the way. It is also much shorter than writing equivalent try-finally blocks:

>>> with open('test.txt','r') as f: ...     buf = f.readlines() >>> f.closed True 
like image 102
sahhhm Avatar answered Sep 24 '22 13:09

sahhhm