从文件中读取特定数量的行而不存储在内存中?

我有一些数据需要使用python代码读取和提取特定的块,但是文件的长度可能是数千万行,而且太大而无法存储在内存中,所以我只想提取我实际需要的数据进行分析。

文件格式如下:

4 # Number of lines per block
0 # Start of block 0
A line of data
A line of data
A line of data
A line of data
1 # Start of block 1
A line of data
A line of data
...

我遇到的问题是,一旦我找到并读取了所需的特定块并放入列表中,我的代码就会继续读取和添加数据,直到文件的末尾而不是该特定块的末尾。

这是我到目前为止所拥有的:

required_block = 5
ilepath = file.txt
data = []

with open(filepath,'r') as f:
    block_length = int(f.readline())
    for line in f:
        block = int(line)
        if block != required_block:
            for _ in range(block_length)
                next(f)
        else:
            break
    for line in f:
        data.append(line)

如果我尝试将范围添加到最后一个“ for”循环中,它将反复读取当前行。

我要去哪里错了?

编辑:为澄清起见,我只希望最后一个“ for”循环运行次。

ptxncxf 回答:从文件中读取特定数量的行而不存储在内存中?

如果您查看代码,那么最后一个for循环就是元凶。您要告诉它无论如何都附加所有内容。在您的第一个for循环中,实际上并没有添加任何内容。因此,基本上在第一个循环中,它仅遍历数据,然后在第二个循环中,它附加所有内容,因为附加操作不在逻辑之外。

认为你想要的是这样的:

for line in f:
        block = int(line)
        if block != required_block:
            next(f)
        else:
            for _ in range(block_length):
                data.append(line)
,

尝试将您的最后一个循环更改为此:

for _ in range(block_length):
    data.append(f.readLine())
,

逐行读取文件:

filepath = 'Iliad.txt'
    with open(filepath) as fp:
       line = fp.readline()
       cnt = 1
       while line:
           print("Line {}: {}".format(cnt,line.strip()))
           line = fp.readline()
           cnt += 1
本文链接:https://www.f2er.com/3164418.html

大家都在问