我在python中读取sys.stdin
的输入,我需要在遇到最后一行时执行一些额外的操作。如何确定当前正在执行的行是否是最后一行?
for line in sys.stdin:
if <line is last line>:
// do some extra operation
else:
// rest of stuff
答案 0 :(得分:3)
知道你在流的最后的唯一方法是当你尝试从它读取时,那里什么也没有。逻辑在之后添加 for循环将在流末尾的情况下。
如果您需要在输入流中检测到流末尾,则在完成上一条记录之前,您的逻辑不能使用“for”循环。相反,你必须使用“while”。您必须预先读取第一条记录,然后,“while”最新的东西读取不为空,您必须读取下一条记录,然后处理当前记录。只有这样,才能在处理当前记录之前知道后面没有记录。
答案 1 :(得分:1)
在开始循环之前,请阅读输入的第一行。然后,在循环中,始终处理先前行读取。在循环终止后,您仍然会在sys.stdin
中使用line_prev
的最后一行进行特殊处理。
import sys
line_prev = sys.stdin.readline()
for line in sys.stdin:
rest_of_stuff(line_prev)
line_prev = line
do_some_extra_operation(line)
答案 2 :(得分:0)
为什么不使用试试这个:
for a in iter(raw_input, ""):
# do something with a
当输入等于sentinel(iter
中的第二个参数)时,循环将中断。您也可以保留对最后一行的引用,例如:
for a in iter(raw_input, ""):
if a == last_line:
# do stuff
last_line = a
# Do more stuff
为了您的理解,python中的所有输入都来自sys.stdin
,因此,您可以使用raw_input
等函数,它将从sys.stdin
读取。可以这样想:
def raw_input():
sys.stdin.readline()
这不完全是那样,但它与那个概念类似。