作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个大型数据集:20,000 x 40,000 作为 numpy 数组。我已将其保存为 pickle 文件。
我不想将这个庞大的数据集读入内存,而是一次只读其中的几行(比如 100 行),用作小批量。
我怎样才能从 pickle 文件中只读取几行随机选择的(没有替换的)行?
最佳答案
您可以将 pickle 增量写入文件,这样您就可以加载它们也是递增的。
举个例子。在这里,我们遍历列表的项目,并且依次 pickle 。
>>> import cPickle
>>> myData = [1, 2, 3]
>>> f = open('mydata.pkl', 'wb')
>>> pickler = cPickle.Pickler(f)
>>> for e in myData:
... pickler.dump(e)
<cPickle.Pickler object at 0x7f3849818f68>
<cPickle.Pickler object at 0x7f3849818f68>
<cPickle.Pickler object at 0x7f3849818f68>
>>> f.close()
现在我们可以反向执行相同的过程并根据需要加载每个对象。为了示例的目的,假设我们只想要第一项而不想要想要遍历整个文件。
>>> f = open('mydata.pkl', 'rb')
>>> unpickler = cPickle.Unpickler(f)
>>> unpickler.load()
1
此时,文件流只前进到第一个目的。其余对象未加载,这正是您的行为想。为了证明,您可以尝试阅读文件的其余部分并查看其余部分还坐在那里。
>>> f.read()
'I2\n.I3\n.'
关于python - 如何从 pickle 文件中一次加载一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37954324/
我是一名优秀的程序员,十分优秀!