python语言如何结尾?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python语言如何结尾?相关的知识,希望对你有一定的参考价值。
python break语句break语句,就像在C语言中,打破了最小封闭for或者while循环。
break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归完,也会停止执行循环语句。
break语句用在while和for循环中。
如果您使用嵌套循环,break语句将停止执行最深层的循环,并开始执行下一行代码。
功能:当代码执行到break时,就会立刻结束break所在的循环。
结束循环:break语句是结束整个循环的过程,不在判断执行循环的条件是否成立。
跳出循环:break语句符合条件后,直接结束循环,只能跳出当前层次的循环。
python continue语句
python continue语句跳出本次循环,而break跳出整个循环。
continue语句用来告诉python跳过当前循环的剩余语句,然后继续进行下一轮循环。
continue语句用在while和for循环中。
功能:用来结束本次循环,紧接着执行下一次的循环。
结束循环:continue语句是只结束本次循环,并不终止整个循环的执行。
跳出循环:跳出循环体中还没有执行的语句,跳出本次循环,但是并不跳出当前循环。 参考技术A python语言是一句一句解释执行的,语句都执行完就结束退出了。
为了程序易读,且各种因错误退出都清晰,一般会在主程序中用 return(返回值) 来标记退出。
python - 如何在不检查空行的情况下循环直到Python中的文件结尾?
【中文标题】python - 如何在不检查空行的情况下循环直到Python中的文件结尾?【英文标题】:How to while loop until the end of a file in Python without checking for empty line? 【发布时间】:2015-05-15 08:28:51 【问题描述】:我正在写一个计算文件中元音数量的作业,目前在我的课堂上我们只使用这样的代码来检查文件的结尾:
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 循环的每次迭代中检查某些内容
提前致谢
【问题讨论】:
这本身并不值得回答,但如果你跳过在你的行中调用strip()
,你的其余代码就可以正常工作。在没有文本的行上调用readline()
将返回"\n"
,而在文件末尾将返回""
(一个空字符串)。另一种选择是调用read()
以将所有文件的文本放在一个长字符串中,然后您可以对其进行迭代。您实际上不需要逐行计算元音。
【参考方案1】:
不要以这种方式循环文件。而是使用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
【讨论】:
吹毛求疵...您应该将as f
添加到with
语句中。
Python 不会为 file.readline() 抛出 EOFError (尽管我希望它这样做并且许多答案声称它确实如此)。相反,寻找一个未终止的空行(例如,line=f.readline(); if not line: ...
)另见docs.python.org/2/library/exceptions.html#exceptions.EOFError
在 SO 中获得 17.8k 声望需要我一生的时间,但有一个更正if line == '':
而不是if line = ''
。我知道这不是讨论的一部分,但我想指出这一点。 :) :) @AdamSmith
@DurwasaChakraborty 谢谢!不管你写了多长时间,你仍然可以打错:)
@Maor 我知道这已经很老了,但我假设您正在查看 while not flag: do_stuff()
与 for thing in stuff: do_stuff(); if flag: break
之类的东西。我通常更喜欢那里的for
循环,但这在很大程度上取决于个人情况。你不会看到太大的性能差异,所以宁愿让你的代码更具可读性。【参考方案2】:
查找文件的结束位置:
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
那么你可以:
if line == '' and f.tell() == endLocation:
break
【讨论】:
【参考方案3】:f 中的行
将所有文件读取到内存中,这可能是个问题。
我的提议是通过替换剥离和检查空行来更改原始来源。因为如果它不是最后一行 - 您将在其中至少收到换行符('\n')。 '.strip()' 将其删除。 但是在文件的最后一行您将收到真正的空行,没有任何字符。所以下面的循环不会给你错误的EOF,也不会浪费内存:
with open("blablabla.txt", "r") as fl_in:
while True:
line = fl_in.readline()
if not line:
break
line = line.strip()
# do what You want
【讨论】:
【参考方案4】:import io
f = io.open('testfile.txt', 'r')
line = f.readline()
while line != '':
print line
line = f.readline()
f.close()
【讨论】:
【参考方案5】:我在遵循上述建议时发现 对于 f 中的行: 不适用于 pandas 数据框(不是有人说会) 因为数据框中文件的结尾是最后一列,而不是最后一行。 例如,如果您有一个包含 3 个字段(列)和 9 个记录(行)的数据框,则 for 循环将在第 3 次迭代后停止,而不是在第 9 次迭代后停止。 特蕾莎
【讨论】:
因为这个问题中没有提到熊猫和熊猫中的数据框,我建议将其作为对原始帖子的评论而不是答案。 (但是,这个帖子有点晚了,所以也许我们就别管它了。)以上是关于python语言如何结尾?的主要内容,如果未能解决你的问题,请参考以下文章