从Python中的文件中提取

从Python中的文件中提取,python,Python,我有一个文本文件,我正在尝试向b添加所有文本,直到出现单词Finish。然而,这只是给了我一个infinte循环如何修复这个问题 def extract(filename): b = '' line = f.readline() while line: line = f.readline().strip() while line != 'Finish': b = b + line line = f.readline() print(b) 感谢您

我有一个
文本文件
,我正在尝试向
b
添加所有文本,直到出现单词
Finish
。然而,这只是给了我一个
infinte循环
如何修复这个问题

def  extract(filename):
b = ''
line = f.readline()
while line:
    line = f.readline().strip()
    while line != 'Finish':
        b = b + line
        line = f.readline()
print(b)

感谢您提供的任何帮助

您可以使用
itertools.takewhile
,它将持续到文件结束或满足其标准,例如:

from itertools import takewhile

with open(filename) as fin:
    lines = (line.strip() for line in fin)
    b = ''.join(takewhile(lambda L: L != 'Finish', lines))
其中包含以下文件:

something 1
something 2
something 3
Finish
something 4
something 5
something 6
为您提供
b
作为:

something 1something 2something 3

如果第一行
不是
'Finish'
,则代码在
循环时会卡在该
中。将
while
更改为
if
以检查该
行是否为
'Finish'
,然后转到下一行。当您点击一个
'Finish'
从for循环中中断或
返回b


(感谢PM 2Ring)

一个没有任何导入的简单代码:

文本文件:

something 1
something 2
something 3
Finish
something 4
something 5
something 6
something 1
something 2
something 3
代码

file = open('try_text.txt', "r")
b = ''
for line in file:
    if "Finish" in line:
        to_append = line.strip().split("Finish")
        b += to_append[0]
        break
    else:
        b += line
print b
输出:

something 1
something 2
something 3
Finish
something 4
something 5
something 6
something 1
something 2
something 3

创建了一个无限循环。如果
,则将其改为
。finish这个词出现了很多次,因此我试图在添加第一行之前将所有文本都改为finish。问题是,除非第一行是
finish
,否则
while
循环永远不会停止。如另一条评论中所建议,替换为
。当您找到一个等于
Finish
的行时,您还需要从
for
循环中
中断
:一种更简洁的方法是在
阻塞时将该
更改为
if line='Finish':中断。不要忘记删除
b=b+行
,将其从
if
块中取出。更好的方法是:将行保存到列表中,并在末尾将它们连接到字符串中。这是假设您实际上想要一个大字符串-字符串列表可能更有用。在Python中,您可以迭代从
open
返回的file对象。在f中为i做
迭代文件中的行。嘿,你能看看我更新的尝试,看看是否有办法解决这个问题吗?谢谢,我觉得稍微调整一下会使无限循环不会发生。不太好,谢谢,我只需要使用两个while循环。一个检查整个文件,另一个检查直到显示完成