从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循环。一个检查整个文件,另一个检查直到显示完成