繁体   English   中英

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

[英]Reading a specific number of lines from a file without storing in memory?

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

文件格式如下:

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”循环运行 <block_length> 次数。

如果您查看您的代码,您的最后一个 for 循环是罪魁祸首。 无论如何,您都在告诉 append 一切。 在您的第一个 for 循环中,您实际上根本没有 append 任何东西。 所以基本上在第一个循环中它只是遍历数据,然后在第二个循环中它附加所有内容,因为 append 不在逻辑范围内。

认为你想要的是这样的:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM