鱼C论坛

 找回密码
 立即注册
查看: 1216|回复: 4

[已解决]采用pickle.load()函数读取的时候怎么知道文件中的对象的数量?

[复制链接]
发表于 2023-9-8 17:53:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在小甲鱼python永久存储(下)的课程中讲到把python对象二进制节流的过程,保存的时候用dump(),读取的时候用load()
读取的时候代码是这样的:
import pickle
with open('data.pkl','wb') as f:
        x = pickle.load(f)
        y = pickle.load(f)
        z = pickle.load(f)
        l = pickle.load(f)
        s = pickle.load(f)
        d = pickle.load(f)

因为在课程上举的例子里小甲鱼是自己写的保存,再读取,所以知道文件中对象的数量,调用了6次函数赋值给6个变量,但是在不知道文件中的对象的数量的情况下怎么知道要调用多少次函数呢?
最佳答案
2023-9-8 18:03:54
xy-xuan 发表于 2023-9-8 17:58
把对象的数量dump是什么意思,基础不好不太懂,能举个例子吗?


import pickle

with open('data.pkl','wb') as f:
        pickle.dump(3, f)        # 有三个对象,先把 3 dump
        pickle.dump(1, f)    # 后面再dump其他对象
        pickle.dump(2, f)
        pickle.dump(3, f)

with open('data.pkl','rb') as f:
        o_num = pickle.load(f)     # 先载入对象个数
        o_arr = []    # 用于存放对象
        for i in range(o_num):
            o_arr.append(pickle.load(f))      # 将载入的对象放入列表

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-8 17:53:12 | 显示全部楼层
在使用pickle.load()函数读取文件时,无法直接知道文件中对象的数量。pickle.load()函数是按照对象的序列化顺序逐个读取对象的,而不是根据对象的数量来确定读取次数。

如果你不知道文件中对象的数量,可以使用try-except结构来处理异常。当读取到文件末尾时,pickle.load()函数会引发EOFError异常,你可以捕获这个异常来结束读取过程。

以下是一个示例代码:

import pickle

objects = []
with open('data.pkl', 'rb') as f:
    try:
        while True:
            obj = pickle.load(f)
            objects.append(obj)
    except EOFError:
        pass

现在,objects列表中存储了文件中的所有对象。你可以根据需要对其进行进一步处理。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-8 17:56:21 | 显示全部楼层
可以用try...except...,

一般的做法是先把对象的数量dump,load第一次的时候就知道有多少个对象了

评分

参与人数 1荣誉 +5 贡献 +3 收起 理由
歌者文明清理员 + 5 + 3 无条件支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-8 17:58:24 | 显示全部楼层
isdkz 发表于 2023-9-8 17:56
可以用try...except...,

一般的做法是先把对象的数量dump,load第一次的时候就知道有多少个对象了

把对象的数量dump是什么意思,基础不好不太懂,能举个例子吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-8 18:03:54 | 显示全部楼层    本楼为最佳答案   
xy-xuan 发表于 2023-9-8 17:58
把对象的数量dump是什么意思,基础不好不太懂,能举个例子吗?


import pickle

with open('data.pkl','wb') as f:
        pickle.dump(3, f)        # 有三个对象,先把 3 dump
        pickle.dump(1, f)    # 后面再dump其他对象
        pickle.dump(2, f)
        pickle.dump(3, f)

with open('data.pkl','rb') as f:
        o_num = pickle.load(f)     # 先载入对象个数
        o_arr = []    # 用于存放对象
        for i in range(o_num):
            o_arr.append(pickle.load(f))      # 将载入的对象放入列表

评分

参与人数 1荣誉 +5 贡献 +3 收起 理由
歌者文明清理员 + 5 + 3 无条件支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-8 23:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表