0

sample.txt:

sample string

code:

   temp = open("sample.txt", "r")
   for i in range(0, 4):
       text = temp.read()
       print(text)

output:

sample string

Why does using read() in loop prevent another 4 cycles?

1
  • 2
    it does not prevent the other 4 cycles. In the last 4 cycles read() returns nothing since it reached EOF Commented Dec 28, 2013 at 12:07

5 Answers 5

2

As doc says:

If the end of the file has been reached, f.read() will return an empty string ("").

So the end of the files has been reached in the first iteration and then it is returning the empty string.

Check the documentation of method of file objects

Sign up to request clarification or add additional context in comments.

Comments

1

This is because once you run read on a file, it reaches the EOF or the End of File, and thus cannot give you any more text. So, it just gives you an empty string

So let me demonstrate with an example:

temp = open('text.txt')
for i in range(4):
    print("Iteration @ {}".format(i))
    t = temp.read()
    print(t)

With text.txt containing:

hello world
cheese cakes

You would get this result:

Iteration @ 0
hello world
cheese cakes
Iteration @ 1

Iteration @ 2

Iteration @ 3

Comments

0

this can do what you want, I suppose:

for i in range(0, 4):
   with open("sample.txt", "r") as temp:
       text = temp.read()
       print(text)

Comments

0

user2309239 is right: read() without parameters read everything(well, the buffer) so after the first read, the cursor is at EOF. And there is nothing to read anymore. I think you want temp.read(1), or be more specific with the question. EDIT: move the read to while instead of for, if you want a break at the end of reading.

Comments

0

The first call to the read method actually returns all the content of the file.

If I understand correctly, you're trying to read the first 4 lines of your file.

You should either do this by iterating through the file and breaking after 4 lines have been read or simply using readline instead of read

Here's how you could do it with readline

temp = open("sample.txt", "r")
for i in range(0, 4):
    text = temp.readline()
    print(text)

Check "Methods on File Objects" in the doc for more info about what methods you can use.

If you were trying to read the whole file's content 4 times, then just put your call to the read method before the loop:

temp = open("sample.txt", "r")
text = temp.read()
for i in range(0, 4):
    print(text)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.