[笔记]python pickle模块

什么叫序列化

把变量存储到磁盘的过程叫序列化,英语中也叫:pickling, serialization, marshalling, fastening。 反之,把磁盘中的变量内容读到内存中就是反序列化,又叫unpickle,名词是unpickling. 在Python中,有两个模块cPickle和pickle可以用来序列化。只不过,cPickle是用C语言写的,,比较快。而pickle,是用python语言写的。 在导入过程中,常常先尝试导入cPickle模块,如果不行,才导入pickle模块。

try:import cPickle as pickleexcept ImportError:import pickle序列化:将一个python对象写入文件中

比如下面的字典对象。 >>> d = dict(name=’Bob’,age=20,score=88)

>>> pickle.dumps(d)

“(dp1\nS’age’\np2\nI20\nsS’score’\np3\nI88\nsS’name’\np4\nS’Bob’\np5\ns.”

dumps()方法返回的是一个字符串,这样可以把字符串写入文件中。

dump(pyObject, fileObject)方法则直接将对象序列化后写入文件中。

>>> f = open(‘dump.txt’, ‘wb’)

>>> pickle.dump(d, f)

这时当前目录下已经有一个文件dump.txt,但是你打开一看发现啥都没 有,这是因为你忘记了关闭文件,这是文件还是打开写入状态,它正等待 你的其他写入命令,直到你关闭它。

>>> f.close()

这时你看就会有写入的字符串了。

反序列化

要把dump.txt的信息读入内存中应该怎么·做呢? 方法一:读入文件到内存,成为字符串对象,对字符串对象使用pickle.loads(aStr) >>> f = open(“dump.txt”,’rb’) >>> xx = f.read() >>> dd = pickle.loads(xx) >>> dd {‘age’: 20, ‘score’: 88, ‘name’: ‘Bob’} >>>f.closed()

方法二:利用pickle.load(file)直接作用于文件对象,之后不要忘记关闭文件。 >>> f = open(“dump.txt”,’rb’) >>> di = pickle.load(f) >>> di {‘age’: 20, ‘score’: 88, ‘name’: ‘Bob’} >>> f.close()

注意:反序列化产生的对象虽然内容和源对象一样,但是它们并不是一个对象。pickle只能适用于python,并且可能不同版本的python都不兼容,因此只能用pickle保存不重要的数据。

其实你已经错过了旅行的意义。

[笔记]python pickle模块

相关文章:

你感兴趣的文章:

标签云: