Python:阅读文本,readlines()vs iter()

时间:2014-03-11 18:10:06

标签: python

我有一个文本文件,带有文本块,每个文件由换行符分隔。有M个块,每个块都有N行文本。我现在想要为每个n块读取m行,其中n<=Nm<=M

我尝试过类似以下的内容:

num_blocks = 4 # or whatever value I choose
num_lines = 3 # or whatever value I choose

with open('file.txt', 'r') as f:
    lines = f.readlines()
    block_num = 0
    line_num = 0
    for line in lines:
        # do something with the line .....
        line_num += 1
        # has the specified number of lines been read?
        if line_num == num_lines:
            block_num += 1
            # has the specified number of blocks been read?
            if block_num == num_blocks:
                break;
            else:
                line_num = 0

然而,当n<N时,我需要跳过当前块中的剩余行。我试过把

if line != '\n':
    continue

# do something with the line .....旁边,但这会跳过整个第一个区块。

或者,我尝试创建迭代器it = lines.iter()并相应地递增每个迭代器。这种方法的问题在于无法知道何时到达文件的末尾。 readlines()为我做了这件事,但如果我使用的是交互者,我就不知道如何知道最后一行何时到达。

有任何帮助吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以测试迭代器的结尾,如下所示:

try:
    it.next()
except StopIteration:
    *do something*

StopIteration异常是迭代器在没有任何东西需要迭代时抛出的内容。