Python如何逐段阅读文本

时间:2017-01-08 22:04:56

标签: python iterator

我是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')

1 个答案:

答案 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以避免遗漏最后一段。