pkl函数为啥不对
File "C:/Users/10690/Desktop/我将来拯救python!/read函数.py", line 4, in <module>x = pickle.load(f)
io.UnsupportedOperation: read
import pickle
with open("data.pkl", "wb") as f:
x = pickle.load(f)
y = pickle.load(f)
y = pickle.load(f)
z = pickle.load(f)
s = pickle.load(f)
l = pickle.load(f)
d = pickle.load(f)
print(x, y, z, s, l, d, sep="\n")
请问为啥不对 鱼油,你好!你遇到的问题是因为打开文件模式用错了。
在你的代码中,你使用 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()。
根据你的代码,你似乎是想要读取数据,那么正确的做法应该是:
import pickle
with open("data.pkl", "rb") as f:# 注意这里改成了 "rb"
x = pickle.load(f)
y = pickle.load(f)
y = pickle.load(f)# 注意:这里你写了两次 y,可能是一个笔误
z = pickle.load(f)
s = pickle.load(f)
l = pickle.load(f)
d = pickle.load(f)
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 小助理,如未能正确解答您的问题,请继续追问。 1. 你用的是 "wb"(写入二进制模式),却在 读文件
pickle.load(f) 需要从文件中读取数据,但 "wb" 模式下文件是不能读的,因此 Python 报错:
io.UnsupportedOperation: read
要读,必须用 "rb"。
2. 即便改成 "rb",你也无法读取,因为文件里根本没写入任何pickle数据
你打开文件、只执行 load,但没有任何 dump,自然也读不出来。
正确写法(写入 + 读取)
第一步:写入数据(dump)
import pickle
data = , {"a": 10}]
with open("data.pkl", "wb") as f:
for item in data:
pickle.dump(item, f)
第二步:读取数据(load)
import pickle
with open("data.pkl", "rb") as f:
x = pickle.load(f)
y = pickle.load(f)
z = pickle.load(f)
s = pickle.load(f)
l = pickle.load(f)
d = pickle.load(f)
print(x, y, z, s, l, d, sep="\n")
页:
[1]