Python For循环似乎被跳过了

时间:2018-05-21 23:17:11

标签: python loops for-loop skip

这是我的第一个问题,所以请你好。 我通过在线课程学习Python。我使用Trinket完成了这项任务,并在那里工作。我通过在线评分系统提交了代码,它也通过了。所以,我已经为这项任务获得了“信誉”。

当我在Idle或PyCharm中尝试时,代码不起作用。它似乎完全跳过for循环。

我已经看过这类问题的其他答案,但我无法弄清楚如何将它们应用到我的情况中。请帮助我理解为什么我的for循环似乎被跳过了。

fname = input("Enter file name: ")
fh = open(fname + ".txt")
x = fh.read()
count = 0
for line in fh:
    line = line.rstrip()
    word = line.split()
    if len(word) == 0:
        continue
    if word[0] != "From":
        continue
    else:
        print(word[1])
        count += 1
print("There were", count, "lines in the file with From as the first word")

在正在使用的.txt文件中,有27个电子邮件地址逐个打印出来,最后一行给出了总计数。就像我说的,它适用于Trinket和在线代码分级器,但不适用于PyCharm或Idle。

提前致谢。

2 个答案:

答案 0 :(得分:1)

执行x = fh.read()时,您正在阅读文件内容并将其存储在变量x中。

来自Python documentation

  

要读取文件的内容,请调用f.read(size),其中包含一些内容   数据量并将其作为字符串返回。尺寸是可选的   数字参数。当大小被省略或为负时,整个   将读取并返回该文件的内容;这是你的问题   该文件是机器内存的两倍。否则,在   读取并返回大多数大小的字节。如果文件的结尾已经存在   到达时,f.read()将返回一个空字符串("")。

因此,一旦完全读取文件,fh已经在文件的末尾,并且使用for循环迭代它不会产生任何新行。你有两个选择:

  1. 使用for line in fh:
  2. 更改for line in x:
  3. 删除x = fh.read()

答案 1 :(得分:0)

您可以尝试替换

for line in fh:

for line in x:

或删除x = fh.read(),因为它会读取整个文件并为您留下一个空文件以供循环使用