Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to while loop until the end of a file in Python without checking for empty line?

I'm writing an assignment to count the number of vowels in a file, currently in my class we have only been using code like this to check for the end of a file:

vowel=0
f=open("filename.txt","r",encoding="utf-8" )
line=f.readline().strip()
while line!="":
    for j in range (len(line)):
        if line[j].isvowel():
            vowel+=1

    line=f.readline().strip()

But this time for our assignment the input file given by our professor is an entire essay, so there are several blank lines throughout the text to separate paragraphs and whatnot, meaning my current code would only count until the first blank line.

Is there any way to check if my file has reached its end other than checking for if the line is blank? Preferably in a similar fashion that I have my code in currently, where it checks for something every single iteration of the while loop

Thanks in advance

like image 445
ay lmao Avatar asked Mar 12 '15 23:03

ay lmao


People also ask

How do you skip a line in a while loop in Python?

The break and continue statements in Python are used to skip parts of the current loop or break out of the loop completely. The break statement can be used if you need to break out of a for or while loop and move onto the next section of code.

How do you read until the end of a file in Python?

The readlines () method is the most popular method for reading all the lines of the file at once. This method reads the file until EOF (End of file), which means it reads from the first line until the last line. When you apply this method on a file to read its lines, it returns a list.

How does Python know when a while loop ends?

The while loop starts only if the condition evaluates to True . If a break statement is found at any point during the execution of the loop, the loop stops immediately. Else, if break is not found, the loop continues its normal execution and it stops when the condition evaluates to False .

How do you end a while loop without a break in Python?

While loops start their looping only if the while statement is true, and they continue to loop until the statement becomes false. If you want your while loop to end without using break, you must write it so the while statement eventually becomes false.


2 Answers

Don't loop through a file this way. Instead use a for loop.

for line in f:
    vowel += sum(ch.isvowel() for ch in line)

In fact your whole program is just:

VOWELS = {'A','E','I','O','U','a','e','i','o','u'}
# I'm assuming this is what isvowel checks, unless you're doing something
# fancy to check if 'y' is a vowel
with open('filename.txt') as f:
    vowel = sum(ch in VOWELS for line in f for ch in line.strip())

That said, if you really want to keep using a while loop for some misguided reason:

while True:
    line = f.readline().strip()
    if line == '':
        # either end of file or just a blank line.....
        # we'll assume EOF, because we don't have a choice with the while loop!
        break
like image 171
Adam Smith Avatar answered Sep 17 '22 01:09

Adam Smith


Find end position of file:

f = open("file.txt","r")
f.seek(0,2) #Jumps to the end
f.tell()    #Give you the end location (characters from start)
f.seek(0)   #Jump to the beginning of the file again

Then you can to:

if line == '' and f.tell() == endLocation:
   break
like image 27
Punnerud Avatar answered Sep 17 '22 01:09

Punnerud