把变量存储到磁盘的过程叫序列化,英语中也叫:pickling, serialization, marshalling, fastening。
反之,把磁盘中的变量内容读到内存中就是反序列化,又叫unpickle,名词是unpickling.
在Python中,有两个模块cPickle和pickle可以用来序列化。只不过,cPickle是用C语言写的,比较快。而pickle,是用python语言写的。
在导入过程中,常常先尝试导入cPickle模块,如果不行,才导入pickle模块。
try:
import cPickle as pickle
except ImportError:
import pickle
比如下面的字典对象。
>>> 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保存不重要的数据。
原文地址:http://blog.csdn.net/myjiayan/article/details/46463723