xy-xuan 发表于 2023-9-8 17:53:02

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

在小甲鱼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个变量,但是在不知道文件中的对象的数量的情况下怎么知道要调用多少次函数呢?

isdkz 发表于 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列表中存储了文件中的所有对象。你可以根据需要对其进行进一步处理。

isdkz 发表于 2023-9-8 17:56:21

可以用try...except...,

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

xy-xuan 发表于 2023-9-8 17:58:24

isdkz 发表于 2023-9-8 17:56
可以用try...except...,

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

把对象的数量dump是什么意思,基础不好不太懂,能举个例子吗?

isdkz 发表于 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))      # 将载入的对象放入列表

曲速引擎 发表于 2024-7-25 16:49:49

有用!收藏了!
页: [1]
查看完整版本: 采用pickle.load()函数读取的时候怎么知道文件中的对象的数量?