Question: In python I'm seeing evidence that fp.readlines() is closing the file when I try to access the fp later in the program. Can you confirm this behavior, do I need to re-open the file again later if I also want to read from it again? 

[Is the file closed?](https://stackoverflow.com/questions/16405926/is-the-file-closed) is similar, but didn't answer all of my questions.

```
import sys 

def lines(fp):
    print str(len(fp.readlines()))

def main():
    sent_file = open(sys.argv[1], "r")

    lines(sent_file)

    for line in sent_file:
        print line

```

this returns:

```
20

```

Answer: 
Once you have read a file, the file pointer has been moved to the end and no more lines will be 'found' beyond that point.

Re-open the file or seek back to the start:

```
sent_file.seek(0)

```

Your file is *not* closed; a closed file raises an exception when you attempt to access it:

```
>>> fileobj = open('names.txt')
>>> fileobj.close()
>>> fileobj.read()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: I/O operation on closed file

```
You may want to use the with statement and context manager:

```
>>> with open('data.txt', 'w+') as my_file:     # This will allways ensure
...     my_file.write('TEST\n')                 # that the file is closed.
...     my_file.seek(0)
...     my_file.read()
...
'TEST'

```

If you use a normal call, remember to close it manually (in theory python closes file objects and garbage collect them as needed):

```
>>> my_file = open('data.txt', 'w+')
>>> my_file.write('TEST\n')   # 'del my_file' should close it and garbage collect it
>>> my_file.seek(0)
>>> my_file.read()
'TEST'
>>> my_file.close()     # Makes shure to flush buffers to disk

```