我正在尝试读取一个文件,该文件在以"--------------------------"
开头的行中会中断:
#!/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
答案 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"
直到文件末尾。