new*_*bie 24 python file pickle
我有一个方法可以将一些pickle对象(实际上是元组)转储到一个文件中.
我不想把它们放在一个列表中,我真的想多次转储到同一个文件中.我的问题是,如何再次加载对象?第一个和第二个对象只有一行,所以这适用于readlines.但所有其他人都更长.自然,如果我尝试
myob = cpickle.load(g1.readlines()[2])
Run Code Online (Sandbox Code Playgroud)
其中g1是文件,我得到一个EOF错误,因为我的pickle对象长于一行.有没有办法得到我的腌制物?
Mar*_*ins 72
如果您直接将文件句柄传递给pickle,您可以获得所需的结果.
import pickle
# write a file
f = open("example", "w")
pickle.dump(["hello", "world"], f)
pickle.dump([2, 3], f)
f.close()
f = open("example", "r")
value1 = pickle.load(f)
value2 = pickle.load(f)
f.close()
Run Code Online (Sandbox Code Playgroud)
pickle.dump 将附加到文件的末尾,因此您可以多次调用它来写入多个值.
pickle.load将从文件中读取足够的内容以获取第一个值,使文件句柄保持打开状态并指向文件中下一个对象的开头.然后第二个调用将读取第二个对象,并将文件指针保留在文件的末尾.EOFError如你所料,第三次通话将失败.
虽然我pickle在我的例子中使用了普通的旧版本,但这种技术的工作原理与之相同cPickle.
Sam*_*uel 19
我认为最好的方法是在存储之前将数据打包到单个对象中,并在加载后将其解压缩.这是一个使用元组作为容器(you can use dict also)的示例:
a = [1,2]
b = [3,4]
with open("tmp.pickle", "wb") as f:
pickle.dump((a,b), f)
with open("tmp.pickle", "rb") as f:
a,b = pickle.load(f)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43039 次 |
| 最近记录: |