虽然循环中断条件不起作用

时间:2016-06-30 16:08:07

标签: python python-3.x

我正在尝试读取一个文件,该文件在以"--------------------------"开头的行中会中断:

#!/usr/bin/python3
def cinpt():
    with open("test", 'r') as finp:
        for line in finp:
            if line.strip().startswith("start"):
                while not line.startswith("---------------"):
                    sdata = finp.readline()
                    print(sdata.strip())

cinpt()

演示输入文件(test)是:

foo
barr
hii
start
some
unknown 
number 
of
line
-----------------------------
some 
more 
scrap

我希望在阅读第"line"行后代码中断。预期的输出是:

some
unknown 
number 
of
line

它需要start条件正确但不会在" ----"中断,而是进入无限循环。我得到的是:

some
scrap
line
-----------------------------
some
more
scrap

2 个答案:

答案 0 :(得分:2)

它永远循环,因为你的行变量在while循环期间不会改变。你应该逐行迭代,简单。

#!/usr/bin/python3
def cinpt():
    with open("test", 'r') as finp:
        started = False
        for line in finp:
            if started:
                if line.startswith("---------------"):
                    break
                else:
                    print(line.strip())
            elif line.strip().startswith("start"):
                started = True

cinpt()

答案 1 :(得分:0)

您应该在一个地方阅读您的文件中的留置权 实际上,您是在for line in finp:行和sdata = finp.readline()处从文件中提取行 - 这可能对您不利(如您所知)。

将您的fiel数据保存在一个位置,并使用辅助状态变量来了解您应该如何处理该数据。 #!的/ usr / bin中/ python3

def cinpt():
    with open("test", 'r') as finp:
        inside_region_of_interest = False
        for line in finp:
            if line.strip().startswith("start"):
                inside_region_of_interest = True
            elif  line.startswith("---------------"):
                inside_region_of_interest = False
            elif inside_region_of_interest:
                sdata = line
                print(sdata.strip())

cinpt()

也就是说,您的特殊问题是,即使您的while条件位于line变量上,您也永远不会在while循环中修改那个变量。其内容保持固定为"start\n"直到文件末尾。