Iterating on a file doesn't work the second time

python loop through lines in file
python open file
python write to file
read file
python read file line by line
python read file line by line example
iterating over lines in a file
loop through file lines

I have a problem with iterating on a file. Here's what I type on the interpreter and the result:

>>> f = open('baby1990.html', 'rU')
>>> for line in f.readlines():
...  print(line)
... 
# ... all the lines from the file appear here ...

When I try to iterate on the same open file again I get nothing!

>>> for line in f.readlines():
...  print(line)
... 
>>>

There is no output at all. To solve this I have to close() the file then open it again for reading! Is that normal behavior?

Yes, that is normal behavior. You basically read to the end of the file the first time (you can sort of picture it as reading a tape), so you can't read any more from it unless you reset it, by either using f.seek(0) to reposition to the start of the file, or to close it and then open it again which will start from the beginning of the file.

If you prefer you can use the with syntax instead which will automatically close the file for you.

e.g.,

with open('baby1990.html', 'rU') as f:
  for line in f:
     print line

once this block is finished executing, the file is automatically closed for you, so you could execute this block repeatedly without explicitly closing the file yourself and read the file this way over again.

11.4. Iterating over lines in a file, Because text files are sequences of lines of text, we can use the for loop to iterate through each line of the file. A line of a file is defined to be a sequence of  (2) With a few exceptions (like the sponge command mentioned by thrig), you can’t use the same file for input and output in the same command; see this. – G-Man Says 'Reinstate Monica' Oct 24 '16 at 18:41

As the file object reads the file, it uses a pointer to keep track of where it is. If you read part of the file, then go back to it later it will pick up where you left off. If you read the whole file, and go back to the same file object, it will be like reading an empty file because the pointer is at the end of the file and there is nothing left to read. You can use file.tell() to see where in the file the pointer is and file.seek to set the pointer. For example:

>>> file = open('myfile.txt')
>>> file.tell()
0
>>> file.readline()
'one\n'
>>> file.tell()
4L
>>> file.readline()
'2\n'
>>> file.tell()
6L
>>> file.seek(4)
>>> file.readline()
'2\n'

Also, you should know that file.readlines() reads the whole file and stores it as a list. That's useful to know because you can replace:

for line in file.readlines():
    #do stuff
file.seek(0)
for line in file.readlines():
    #do more stuff

with:

lines = file.readlines()
for each_line in lines:
    #do stuff
for each_line in lines:
    #do more stuff

You can also iterate over a file, one line at a time, without holding the whole file in memory (this can be very useful for very large files) by doing:

for line in file:
    #do stuff

10.4. Iterating over lines in a file, Because readlines() returns a list of lines of text, we can use the for loop to iterate through each line of the file. A line of a file is defined to be a sequence of  To iterate through all files and folders you can use for /F "delims=" %%a in ('dir /b /s') do echo %%a To iterate through all folders only not with files, then you can use

The file object is a buffer. When you read from the buffer, that portion that you read is consumed (the read position is shifted forward). When you read through the entire file, the read position is at the end of the file (EOF), so it returns nothing because there is nothing left to read.

If you have to reset the read position on a file object for some reason, you can do:

f.seek(0)

How to iterate through the lines of a file in Python, Iterating through the lines of a file results in accessing each of the lines separately. Use a for-loop to iterate through the lines of a file. In a with-statement, use open(  In a related thread iterate-over-cin-line-by-line quoted above, Jerry Coffin described "another possibility (which) uses a part of the standard library most people barely even know exists." The following applies that method (which was what I was looking for) to solve the iterate-over-file-line-by-line problem as requested in the current thread.

Of course. That is normal and sane behaviour. Instead of closing and re-opening, you could rewind the file.

Iterating over files with Python, A short block of code to demonstrate how to iterate over files in a directory and do some action with them. import os directory = 'the/directory/you/  To list the files and folders recursively in a given directory, please use below methods. Using os.walk() function. This function is also included in the os module. This function will iterate over all the files immediately as well as it’ll iterate over all the descendant files present in the subdirectories in a given directory.

Loop over list of files, exclude samples that are already processed process input files Data/*.fastq only if result-files Result/*.txt does not exist for f in Data/*.fastq; do \ Most things just work fine, with one big exception: iterating through a folderitem's children is exceedingly, and I mean exceedingly slow. This is true for both using the new ChildAt(i) method as well as Christian's FilesMBS to populate an array with all the files in a folder (using FilesMBS, it took about 5 minutes to load the around 7000 files into the array, with the CPU heating up nicely).

bash iterate file list, except when empty, This way if ls fails (which it does in your case) it will grep the failed output and return as a blank variable. current file is <---Blank Here. You can add some logic to  Iterating over a Directory with a Dir Loop (Loop Through Directory) VB. VBA is potentially the greatest desktop ‘hammer’ you have at your disposal. You can pop open any Office application, hit ALT+F11 and be writing code before Visual Studio will even be open on most machines.

Command-line Basics: How to Loop Through Files in a Directory , Learn how to loop through the files in a directory and run commands against them using shell scripting for loops. So the two emailed and Skyped back and forth, iterating on details like the length of the device and the size of the head. — Matt Simon, WIRED, "The Strange Saga of the Butt Plug Turned Research Device," 11 July 2019 Much of the successful funding encouraged creative librarians to experiment

Comments
  • There is no reason to read the file twice if you're using readlines().
  • 'U' is deprecated in python 3.
  • This isn't helpful to a user who is unfamiliar with the concept of a read-pointer