我有一个文本文件,带有文本块,每个文件由换行符分隔。有M
个块,每个块都有N
行文本。我现在想要为每个n
块读取m
行,其中n<=N
和m<=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()
为我做了这件事,但如果我使用的是交互者,我就不知道如何知道最后一行何时到达。
有任何帮助吗?谢谢!
答案 0 :(得分:0)
您可以测试迭代器的结尾,如下所示:
try:
it.next()
except StopIteration:
*do something*
StopIteration异常是迭代器在没有任何东西需要迭代时抛出的内容。