什么是对象持久化?
对象持久化就是把结构化数据存储起来的过程,并且可以从存储文件恢复为原来的结构化数据。
对象持久化有什么用?
这个用途还是很广泛的,当我们需要保存一个字典文件或者列表文件的时候,我们不能用一般的方法来保存,因为在读取时,还是普通的字符串,并不是对应的字典或者列表了。此时就需要我们使用对象持久化的办法,保存为文件,在使用时读取文件,得到的仍然是原来的对象,或者可以很简单地转化为原来的对象。这在实际中,使用还是很多的。
怎么实现对象持久化
下面主要聊的是模块,而每个模块的方法都很类似,一般常用的都是以下4种方法:dumps()方法,将对象转换为字符串str格式;
dump()方法,将对象保存为文本文件;
loads()方法,将字符串str转换为相应的对象格式
load()方法,将文本文件中保存的转换为对象
都有哪些模块?
pickle模块:刚开始我都是用这个模块,这是Python自带的模块
cPickle模块:这是C语言版本的pickle,比pickle快很多
json模块:json是一种文件格式,但是也能用来进行对象持久化
UltraJSON模块:这是一个第三方的模块,和json模块很类似,但是速度比json模块快很多,也比pickle和cPikcle快很多,尤其是数据比较大的时候,这种差距就更明显了
我推荐使用UltraJSON模块,这个比其他模块在使用时都快很多,据说是目前最快的。虽然我们经常看到的json文件十分类似python中的字典,但是其实不仅字典对象能够被持久化,列表等其他对象也可以。
怎样把多个对象保存在一个文件中
一般我们正常使用,保存在文件中的只有一行,也只是一个对象,比如
import ujson
my_object = [[1, 2, 3], [4, 5, 6],[7, 8, 9]]#列表对象
with open('test.json', 'w') as f:
ujson.dump(my_object, f)
最后保存的结果是
[[1, 2, 3], [4, 5, 6],[7, 8, 9]]
但是如果我们希望保存的结果如下:
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
我们可以这么做:
import ujson
my_object = [[1, 2, 3], [4, 5, 6],[7, 8, 9]]#列表对象
with open('test.json', 'w') as f:
for data in b:
ujson.dump(data, f)
f.write('\n')
同样的道理,很多文件在读取时总体并不是json格式,但是每一行是的,那么就可以这样做:
import ujson
data = []
with open('file', 'r') as f:
for line in f:
data.append(ujson.loads(line))