我是Python初学者,我试图使用迭代器和下一步方法逐段阅读example.txt文件。问题是,我无法弄清楚如何在不使用for循环或line = next(it)的情况下在下一个方法中逐行读取。任何帮助将不胜感激。这就是我现在所拥有的。
class ByParagraph:
def __init__(self, text):
self.text = text
def __iter__(self):
return self
par = ""
def __next__(self):
par = ""
if (I still need to decide how to stop the iterations):
raise StopIteration
if str(self.text).isspace():
return par.strip()
else:
return ' '.join([par, str(self.text)])
with open("example.txt") as f:
for par in ByParagraph(f):
print('BEGIN PAR' + par + 'END PAR')
答案 0 :(得分:1)
所以你需要实际使用self.text
,因为这是一个文件迭代器(f
),即你需要调用next(self.text)
。你需要多次调用它来消耗所有行,直到你收到一个空白,所以你需要一个循环。 for
循环将调用next(self.text)
,因此这应该有效,例如:
def __next__(self):
par = []
for line in self.text:
if line.isspace():
break
par.append(line.strip())
else:
if not par:
raise StopIteration()
return ' '.join(par)
for
循环将在StopIteration
上干净地退出,因此将输入else
子句。只有在没有StopIteration
的情况下才应提出par
以避免遗漏最后一段。