it-swarm.com.de

Wie kann man eine Schleife in Python bis zum Ende einer Datei machen, ohne nach leeren Zeilen zu suchen?

Ich schreibe einen Auftrag, um die Anzahl der Vokale in einer Datei zu zählen. Derzeit haben wir in meiner Klasse nur Code wie diesen verwendet, um das Ende einer Datei zu prüfen:

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()

Dieses Mal ist die von unserem Professor gelieferte Eingabedatei jedoch ein vollständiger Aufsatz. Es gibt also mehrere leere Zeilen im Text, um Absätze und so weiter zu trennen, was bedeutet, dass mein aktueller Code nur bis zur ersten leeren Zeile zählt.

Gibt es eine Möglichkeit zu überprüfen, ob meine Datei ihr Ende erreicht hat, außer zu prüfen, ob die Zeile leer ist? Vorzugsweise auf eine ähnliche Art und Weise, in der ich meinen Code derzeit habe, wo er bei jeder einzelnen Iteration der while-Schleife nach etwas sucht

Danke im Voraus

4
ay lmao

Durchlaufen Sie eine Datei nicht auf diese Weise. Verwenden Sie stattdessen eine for-Schleife.

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

In der Tat ist Ihr gesamtes Programm nur:

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())

Das heißt, wenn Sie eine while-Schleife aus irgendeinem fehlgeleiteten Grund wirklich weiterhin verwenden möchten:

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
18
Adam Smith

Endposition der Datei suchen:

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

Dann können Sie:

if line == '' and f.tell() == endLocation:
   break
0
Punnerud