Search code examples
pythonfile-iocoding-style

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?


Solution

  • 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