访问文件中的第 n 个 pickle
Accessing the nth pickle in a file
我有一个包含数千个 pickle
对象的文件。
我想访问第 n 个腌制对象而不必加载所有前面的对象。
我检查了答案 here and here 但他们没有回答我的问题。我的理解是递归 unpickling 从顶部开始,并在每个项目被 unpickle 后将光标移动到下一个项目。
是否可以手动指定光标的起始位置以便我只解开我想要的对象?
例如
import pickle
with open('file.pkl', 'rb') as f:
for _ in range(2000, 2005):
data = pickle.load(f) # This only loads the first 5 items, not the 2000-2005th items
在新项目中,改用 "shelve" 模块。您可以像字典一样访问腌制对象:
import shelve
sh= shelve.open("my_objects.db")
ll= [1,2,3,"Hello"]
sh["my_list"]= ll
sh["my_dict"]= { k:k*10 for k in range(10) }
sh.close()
sh= shelve.open("my_objects.db")
lizy= sh["my_list"]
dizy= sh["my_dict"]
sh.close()
我有一个包含数千个 pickle
对象的文件。
我想访问第 n 个腌制对象而不必加载所有前面的对象。
我检查了答案 here and here 但他们没有回答我的问题。我的理解是递归 unpickling 从顶部开始,并在每个项目被 unpickle 后将光标移动到下一个项目。
是否可以手动指定光标的起始位置以便我只解开我想要的对象?
例如
import pickle
with open('file.pkl', 'rb') as f:
for _ in range(2000, 2005):
data = pickle.load(f) # This only loads the first 5 items, not the 2000-2005th items
在新项目中,改用 "shelve" 模块。您可以像字典一样访问腌制对象:
import shelve
sh= shelve.open("my_objects.db")
ll= [1,2,3,"Hello"]
sh["my_list"]= ll
sh["my_dict"]= { k:k*10 for k in range(10) }
sh.close()
sh= shelve.open("my_objects.db")
lizy= sh["my_list"]
dizy= sh["my_dict"]
sh.close()