在Python中从文件中以一定的间隔读取行:readline()的替代品

问题描述 投票:0回答:1

我意识到如何以 [start, stop] 间隔从文件中读取行是一个常见问题,但是许多标准答案不适用于我的数据集。

具体来说,我有 500K 行和 100K 列的数据文件。每个 50 行块都是一个单独的数据集,我需要将其作为一个块读取、分析,然后转到下一个块。使用 readlines() 创建一个可以以 50 为增量进行采样的数据对象是行不通的,因为数据对象占用了太多内存。

我认为类似下面的东西会起作用(对于下面的示例,我创建了一个包含 150 行的测试文件(50 行的 3 个重复项)。“myfunction()”只是用于处理每行的占位符)

infile = open("test_file", "r")
outfile = open("out_test_file", "w")

for rep in range(0:3):
    to_sample = list(range(rep*50, rep*50+50))
    i = 0
    for line in infile:
        if i in to_sample:
            something_useful = my_function(line)
    i=i+1
    outfile.write(str(something_useful))

 outfile.close()

该脚本让我完成了第 50 次迭代,但随后无法继续,大概是因为

for line infile

在代表的下一次迭代期间,循环不会从文件的开头开始,因为它已经读取了 infile 的最后一行。

正如我所说,如果数据文件的大小是可管理的,我可以只使用读取行,然后使用循环代表和行号以所需的间隔对矩阵进行采样,但这对于该数据集是不可行的。什么是有效的替代方案?

python
1个回答
0
投票

内循环读取整个文件。当您重复外循环时,文件中没有任何内容可供读取。

使用范围循环作为内部循环,并调用

readline()

for _ in range(3):
    for i in range(50):
        line = infile.readline()
        something_useful = my_function(line)
    outfile.write(something_useful)
© www.soinside.com 2019 - 2024. All rights reserved.