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

Adr*_*nNK 1 python file svmlight

我有大svmlight文件,我正在用于机器学习目的.我试图看看这些文件的总和是否会导致足够好的结果.

我想提取我的文件的随机行,以将它们提供给我的模型,但我想在RAM中加载较少的信息.

我在这里看到(从Python中的文件中读取一些随机行),我可以使用linecache,但所有解决方案最终都会将所有内容加载到内存中.

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

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

Jon*_*nts 5

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

import heapq
import random

SIZE = 10
with open('yourfile') as fin:
    sample = heapq.nlargest(SIZE, fin, key=lambda L: random.random())
Run Code Online (Sandbox Code Playgroud)

这非常有效,因为heapq保持固定大小,它不需要对数据进行预扫描,并且元素会被替换掉,因为其他元素会被选中 - 所以最多你最终会SIZE在内存中找到元素.