python - 如何在不检查空行的情况下循环直到 Python 中的文件末尾?

标签 python loops file-io

<分区>

我正在写一个作业来计算文件中元音的数量,目前在我的类里面我们只使用这样的代码来检查文件的结尾:

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

但是这次对于我们的作业,我们教授给的输入文件是整篇文章,所以整个文本中有几个空行来分隔段落等等,这意味着我当前的代码只能计算到第一个空行。

除了检查该行是否为空之外,还有什么方法可以检查我的文件是否已到达末尾?最好以与我当前的代码类似的方式,它在 while 循环的每次迭代中检查某些内容

提前致谢

最佳答案

不要以这种方式循环文件。而是使用 for 循环。

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

事实上你的整个程序只是:

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

就是说,如果您出于某些误入歧途的原因真的想继续使用 while 循环:

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

关于python - 如何在不检查空行的情况下循环直到 Python 中的文件末尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29022377/

相关文章:

python - 找到给定数组的正偶数的最大分割

java - 陷入数组的 for 循环(java)。 [i], [i+1],[i+2]

java - 如果用户这么说,如何让我的代码再次循环?

无需 pickle 即可进行序列化的 Python 类设置

python - 在 docker 中部署一个最小的 flask 应用程序 - 服务器连接问题

python - 谷歌应用引擎 : Production versus Development Settings

c++ - 如何向文件添加新行?

r - textConnection 相当于可以 readBin

python - 如何使用 Celery、RabbitMQ 和 Django 确保每个用户的任务执行顺序?

Objective-C:NSNumber 对象的平滑 NSArray