给你的上下文:一次读取多个Python pickle数据,缓冲和换行符?
我有一个大文件f
,几个Gig的大小。它包含运行
for obj in objs: cPickle.dump(obj, f)
我想读这个文件时采取缓冲的优势,产生不同的对象的连续咸菜。我想要的是,将几个挑选的对象一次读入缓冲区。这样做的最好方法是什么?我想要一个的模拟腌制数据。事实上,如果挑选的数据确实是换行符分隔符,可以使用readlines,但我不确定这是否属实。
我想到的另一种选择是将dumps()
pickled对象先转换为字符串,然后将字符串写入文件,每个文件用换行符分隔。要读取文件,我可以使用readlines()
和loads()
。但我担心一个腌制的物体可能具有"\n"
字符,并且会抛弃此文件阅读方案。我的恐惧没有根据吗?
一种选择是通过酸洗它作为一个巨大的物体的名单,但将需要更多的内存,比我能买得起。设置可以通过多线程加速,但我不想在缓冲工作正常之前去那里。什么是这种情况的“最佳做法”。
编辑: 我也可以读取原始字节到一个缓冲区并调用负载,但我需要知道负载消耗了多少个字节的缓冲区,以便我可以把它扔掉。
应该已经在后台发生了缓冲。线程也无济于事。 – 2011-04-01 03:58:41
如果你可以控制pickle文件的创建,你可以使用'pickle.dump(obj,f,pickle.HIGHEST_PROTOCOL)'(或者等价的'pickle.dump(obj,f, -1)'),这是一个二进制协议,比你得到的默认ASCII码更紧凑。拥有更小的文件可能会缓解对缓冲的担忧。事实上,这可能意味着@Kirk Strauser的[答案](http://stackoverflow.com/a/5507750/355230)中的“寻找以''。\ n''”结尾的行将不起作用。 – martineau 2015-01-11 16:26:41