如何仅从泡菜文件中加载选定的对象?

时间:2018-07-22 00:18:42

标签: python memory pickle

我有多个包含两个列表的泡菜文件。第一个是浮点数的轻量级列表,但是第二个是长向量的列表,长向量在加载时会占用大量内存。如何仅从每个泡菜文件中加载第一个列表?这是我目前的做法:

import cPickle, bz2    
with bz2.BZ2File(lhl_file, "rb") as pickled_file:
    pickle_object = cPickle.load(pickled_file)
    light_list, \
    heavy_list = list(pickle_object) 

1 个答案:

答案 0 :(得分:0)

如果您将两个列表分别腌制到一个腌菜文件中,则应该能够轻松地分别加载它们。

这是我改编自另一个answer的一个示例,内容更加详尽。

import pickle

filename = "pickle.dat"
data1 = 'hello'
data2 = 'world'
data3 = 'buddy'

# pickle one object at at time
f1 = open(filename, "wb")
pickle.dump(data1, f1)
pickle.dump(data2, f1)
pickle.dump(data3, f1)
f1.close()

# so that you can load them one at at time
f2 = open(filename, 'rb')
print pickle.load(f2)
print pickle.load(f2)
f2.close()

输出:

hello
world

PS:据我所知,不可能在data1之前加载data2。看来情况并非如此。