从stdin读取时识别流的结尾

时间:2015-04-21 19:39:20

标签: python

我在python中读取sys.stdin的输入,我需要在遇到最后一行时执行一些额外的操作。如何确定当前正在执行的行是否是最后一行?

for line in sys.stdin:
    if <line is last line>:
        // do some extra operation
    else:
        // rest of stuff

3 个答案:

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

这不完全是那样,但它与那个概念类似。