您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python-在pickle文件中保存和加载多个对象?

Python-在pickle文件中保存和加载多个对象?

到目前为止,使用列表,元组或字典是最常见的方法

import pickle
PIK = "pickle.dat"

data = ["A", "b", "C", "d"]
with open(PIK, "wb") as f:
    pickle.dump(data, f)
with open(PIK, "rb") as f:
    print pickle.load(f)

输出

['A', 'b', 'C', 'd']

但是,泡菜文件可以包含任意数量的泡菜。这是产生相同输出代码。但是请注意,它很难编写和理解:

with open(PIK, "wb") as f:
    pickle.dump(len(data), f)
    for value in data:
        pickle.dump(value, f)
data2 = []
with open(PIK, "rb") as f:
    for _ in range(pickle.load(f)):
        data2.append(pickle.load(f))
print data2

如果这样做,你有责任知道所写出的文件中有多少个泡菜。上面的代码通过首先腌制列表对象的数量来做到这一点。

首先,如果在到达文件末尾时停止加载,则无需存储单独腌制的项目数:

def loadall(filename):
    with open(filename, "rb") as f:
        while True:
            try:
                yield pickle.load(f)
            except EOFError:
                break

items = loadall(myfilename)

假设文件仅包含泡菜;如果里面还有其他东西,产生器将尝试把里面的其他东西都当作泡菜,这很危险。

其次,通过这种方式,你不会获得列表,而是生成器。一次只能将一个项目加载到内存中,这在转储的数据非常大时很有用-这可能是你可能想首先腌制多个项目的可能原因。你还可以遍历items一个for循环就好像它是一个列表。

python 2022/1/1 18:24:17 有466人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶