Skip to main content
 首页 » 编程设计

python之在python中提取文件中的随机行而不将文件加载到RAM中

2025年05月04日10mq0036

我有用于机器学习目的的大型 svmlight 文件。我正在尝试查看对这些文件进行总采样是否会产生足够好的结果。

我想提取文件的随机行以将它们输入到我的模型中,但我想在 RAM 中加载尽可能少的信息。

我在这里 ( Read a number of random lines from a file in Python ) 看到我可以使用 linecache 但所有解决方案最终都会将所有内容加载到内存中。

有人可以给我一些提示吗?谢谢。

编辑:忘了说我事先知道文件中的行数。

请您参考如下方法:

您可以使用heapq 根据随机数选择n 条记录,例如:

import heapq 
import random 
 
SIZE = 10 
with open('yourfile') as fin: 
    sample = heapq.nlargest(SIZE, fin, key=lambda L: random.random()) 

这是非常有效的,因为 heapq 保持固定大小,它不需要对数据进行预扫描,并且元素会在选择其他元素时被换出 - 所以最多你会得到 一次在内存中 SIZE 个元素。