我查看了Python文档提供的信息,但我仍然有点困惑.有人可以发布编写新文件的示例代码,然后使用pickle将字典转储到其中吗?
我正在尝试使用pickle
模块保存和加载对象.
首先,我声明我的对象:
>>> class Fruits:pass
...
>>> banana = Fruits()
>>> banana.color = 'yellow'
>>> banana.value = 30
Run Code Online (Sandbox Code Playgroud)
之后我打开一个名为'Fruits.obj'的文件(之前我创建了一个新的.txt文件,我重命名为'Fruits.obj'):
>>> import pickle
>>> filehandler = open(b"Fruits.obj","wb")
>>> pickle.dump(banana,filehandler)
Run Code Online (Sandbox Code Playgroud)
执行此操作后,我关闭了会话,然后我开始了一个新的会话,然后我将下一个(尝试访问它应该保存的对象):
file = open("Fruits.obj",'r')
object_file = pickle.load(file)
Run Code Online (Sandbox Code Playgroud)
但我有这样的信息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python31\lib\pickle.py", line 1365, in load
encoding=encoding, errors=errors).load()
ValueError: read() from the underlying stream did notreturn bytes
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么办,因为我不明白这个消息.有谁知道如何加载我的对象'香蕉'?谢谢!
编辑: 因为你们有些人已经吮吸我放:
>>> import pickle
>>> file = open("Fruits.obj",'rb')
Run Code Online (Sandbox Code Playgroud)
没有问题,但我接下来的是:
>>> object_file = …
Run Code Online (Sandbox Code Playgroud) 我有一个课程,为游戏中的玩家提供服务,创建他们和其他东西.
我需要将这些播放器对象保存在文件中以便以后使用.我尝试了pickle模块,但我不知道如何保存多个对象并再次加载它们?有没有办法做到这一点,或者我应该使用其他类,如列表,并保存和加载我的对象列表?
有没有更好的办法?
我是python的新手,想要实现快速对象序列化.我试图使用json,但它太慢了,也试图使用马歇尔模块,但是由马歇尔序列化的对象大小比pickle多6-7倍,所以我决定在我的项目中使用pickle.我读了一下cPickle模块,读得很快,但python 3中没有这样的模块,docs说名为_pickle的模块是用C语言编写的.所以在我的项目中我使用
import _pickle as pickle
Run Code Online (Sandbox Code Playgroud)
pickle和_pickle之间有什么区别吗?我如何实现更快的对象序列化/反序列化?
我有一个方法可以将一些pickle对象(实际上是元组)转储到一个文件中.
我不想把它们放在一个列表中,我真的想多次转储到同一个文件中.我的问题是,如何再次加载对象?第一个和第二个对象只有一行,所以这适用于readlines.但所有其他人都更长.自然,如果我尝试
myob = cpickle.load(g1.readlines()[2])
Run Code Online (Sandbox Code Playgroud)
其中g1是文件,我得到一个EOF错误,因为我的pickle对象长于一行.有没有办法得到我的腌制物?
我是一个完全的泡菜新手,我有一堆(约100,000)图像需要被腌制。
它们首先作为图像对象加载,然后转换为数据,如下所示:
image = {
'pixels': im.tostring(),
'size': im.size,
'mode': im.mode,
}
Run Code Online (Sandbox Code Playgroud)
现在如何将它们腌制到一个pkl文件中?
我试图用咸菜弄湿我的脚,所以我写了一些这样的示例代码:
class start(tk.Frame):
def __init__(self,*args,**kwargs):
tk.Frame.__init__(self,*args,**kwargs)
frame = tk.Frame(self,width=600,height=600)
self.val = 0
self.plusButton = tk.Button(self,text="plus",command=self.plus)
self.plusButton.pack()
self.valLabel = tk.Label(self)
self.valLabel.pack()
self.saveButton = tk.Button(self,text="save",command=self.save)
self.saveButton.pack()
self.loadButton = tk.Button(self,text="load",command=self.load)
self.loadButton.pack()
def load(self):
self.__dict__ = pickle.load(open( "testtesttest.p", "rb" ))
def plus(self):
self.val += 1
self.valLabel.config(text="%d"%(self.val))
def save(self):
pickle.dump(self.__getstate__, open( "testtesttest.p", "wb" ))
def __getstate__(self):
return self.__getstate__
if __name__=='__main__':
root = tk.Tk()
start(root).pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
因此,此应用程序的目标是一旦我按下加号按钮,屏幕上的数字就会越来越多。如果我保存它,请关闭窗口,重新打开它,然后单击“加载”按钮,我将看到上次增加该数字的时间。我对pickle还是很陌生,当前代码将其反馈给我:
Exception in Tkinter callback
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/tkinter/__init__.py", line 1550, in __call__return self.func(*args)
File "/Users/caoanjie/pickleDemotry.py", line …
Run Code Online (Sandbox Code Playgroud) 我对我的代码有一些疑问:
def entry_book():
book = ["autor", "ime", "godina", "ISNB", "zanr", "cena", "broj"]
print ("Podaci za knjigu:")
book[0] = input ("Autor: ")
book[1] = input ("Naslov: ")
book[2] = input ("Godina: ")
book[3] = input ("ISNB: ")
book[4] = input ("Zanr: ")
book[5] = input ("Cena: ")
book[6] = input ("Kolicina: ")
record= "{}|{}|{}|{}|{}|{}|{}".format (book[0], book[1], book[2], book[3],
book[4], book[5], book[6])
print (book)
print (record)
f = open('books.txt','w')
f.write (record)
f.close()
f = open("books.txt")
x = f.read()
f.close()
print (x)
record1 …
Run Code Online (Sandbox Code Playgroud)