鱼C论坛

 找回密码
 立即注册
查看: 32|回复: 2

pkl函数为啥不对

[复制链接]
发表于 昨天 15:09 | 显示全部楼层 |阅读模式

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

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

x
  1. File "C:/Users/10690/Desktop/我将来拯救python!/read函数.py", line 4, in <module>
  2.     x = pickle.load(f)
  3. io.UnsupportedOperation: read
复制代码
  1. import pickle

  2. with open("data.pkl", "wb") as f:
  3.     x = pickle.load(f)
  4.     y = pickle.load(f)
  5.     y = pickle.load(f)
  6.     z = pickle.load(f)
  7.     s = pickle.load(f)
  8.     l = pickle.load(f)
  9.     d = pickle.load(f)

  10. print(x, y, z, s, l, d, sep="\n")
复制代码


请问为啥不对
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 昨天 15:10 | 显示全部楼层
鱼油,你好!你遇到的问题是因为打开文件模式用错了。

在你的代码中,你使用 with open("data.pkl", "wb") as f: 打开了文件,模式是 "wb"(写入二进制模式)。但是,紧接着你却试图从文件中读取数据(使用 pickle.load(f)),这当然会出错,因为以写入模式打开的文件不支持读取操作。

错误信息 io.UnsupportedOperation: read 就是告诉你,当前文件对象不支持读取。

要解决这个问题,你需要根据你的意图来选择正确的文件打开模式:

1. 如果你是想从已有的 data.pkl 文件中读取数据,那么应该使用 "rb"(读取二进制模式)打开文件。
2. 如果你是想将数据写入到 data.pkl 文件中,那么应该使用 pickle.dump() 来写入,而不是 pickle.load()

根据你的代码,你似乎是想要读取数据,那么正确的做法应该是:


  1. import pickle

  2. with open("data.pkl", "rb") as f:  # 注意这里改成了 "rb"
  3.     x = pickle.load(f)
  4.     y = pickle.load(f)
  5.     y = pickle.load(f)  # 注意:这里你写了两次 y,可能是一个笔误
  6.     z = pickle.load(f)
  7.     s = pickle.load(f)
  8.     l = pickle.load(f)
  9.     d = pickle.load(f)

  10. print(x, y, z, s, l, d, sep="\n")
复制代码


但是,请注意:你的代码中连续使用了多次 pickle.load(f),这意味着你期望文件中存储了多个独立的对象,并且按照顺序读取它们。这通常是在之前使用多次 pickle.dump() 将多个对象依次写入同一个文件时才会这样读取。

如果你的 data.pkl 文件并不是这样存储的,那么读取时可能会遇到其他错误(比如 EOFError)。所以,请确保你的 data.pkl 文件确实是以这种方式存储的。

另外,你的代码中有一行 y = pickle.load(f) 出现了两次,这可能是笔误,请检查是否需要。

希望这个解释对你有帮助!如果还有疑问,欢迎继续提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 15:26 | 显示全部楼层
1. 你用的是 "wb"(写入二进制模式),却在 读文件

pickle.load(f) 需要从文件中读取数据,但 "wb" 模式下文件是不能读的,因此 Python 报错:

  1. io.UnsupportedOperation: read
复制代码

要读,必须用 "rb"。

2. 即便改成 "rb",你也无法读取,因为文件里根本没写入任何pickle数据

你打开文件、只执行 load,但没有任何 dump,自然也读不出来。

正确写法(写入 + 读取)

第一步:写入数据(dump)

  1. import pickle

  2. data = [1, 2, 3, "hello", [4, 5], {"a": 10}]

  3. with open("data.pkl", "wb") as f:
  4.     for item in data:
  5.         pickle.dump(item, f)
复制代码

第二步:读取数据(load)

  1. import pickle

  2. with open("data.pkl", "rb") as f:
  3.     x = pickle.load(f)
  4.     y = pickle.load(f)
  5.     z = pickle.load(f)
  6.     s = pickle.load(f)
  7.     l = pickle.load(f)
  8.     d = pickle.load(f)

  9. print(x, y, z, s, l, d, sep="\n")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-11 06:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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