这是我的第一个问题,所以请你好。 我通过在线课程学习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。
提前致谢。
答案 0 :(得分:1)
执行x = fh.read()
时,您正在阅读文件内容并将其存储在变量x
中。
要读取文件的内容,请调用f.read(size),其中包含一些内容 数据量并将其作为字符串返回。尺寸是可选的 数字参数。当大小被省略或为负时,整个 将读取并返回该文件的内容;这是你的问题 该文件是机器内存的两倍。否则,在 读取并返回大多数大小的字节。如果文件的结尾已经存在 到达时,f.read()将返回一个空字符串("")。
因此,一旦完全读取文件,fh
已经在文件的末尾,并且使用for
循环迭代它不会产生任何新行。你有两个选择:
for line in fh:
或for line in x:
x = fh.read()
答案 1 :(得分:0)
您可以尝试替换
for line in fh:
与
for line in x:
或删除x = fh.read()
,因为它会读取整个文件并为您留下一个空文件以供循环使用