六、pickle模块
1.Python的pickle模块
- pickle是python中独有的序列化模块,所谓独有,就是指不能和其他编程语言的序列化进行交互,因为pickle将数据对象转化为bytes
- dumps和dump都是进行序列化的,而loads和load则是反序列化的
- dumps将所传入的变量的值序列化为一个bytes,然后,就可以将这个bytes写入磁盘或者进行传输
- 而dump则更加一步到位,在dump中可以传入两个参数,一个为需要序列化的变量,另一个为需要写入的文件
- loads当我们要把bytes反序列化为内存对象
- load直接妇女序列化一个文件为内存对象
2.pickle VS json
- 如果没有协同和交互的要求,那么就用pickle,直接序列化二进制数据就够用了,尤其是cPickle会带来高性能
- 如果有协同交互的要求,那么可以用json,它将生成可读的文本内容,比如网络上传输
- 对于错误的甚至恶意的字节流,pickle并没有安全的措施。所以,不要unpickle从不受信来源得到的数据
3.pickle模块使用
- 基础使用
import pickle
obj = {'a': 1, 'b': 2, 'c': 3}
pickle.dump(obj, open("tmp.txt", "wb"))
# 从tmp.txt中读取并恢复obj对象
obj2 = pickle.load(open("tmp.txt", "rb"))
print (obj2)
模块的作用:数据持久化,一些字符串、列表、字典等数据转换为一种可以传输或存储的格式
- 将要持久化存储的数据如accounts,保存到account.db文件中
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import pickle
accounts = {
1000:{
'name':'xiaoming',
'email':'10000@qq.com',
'balance':100,
'bank_acc':{
'ICBC':100,
'ABC':1000
}
}
}
f = open('account.db','wb')
f.write(pickle.dumps(accounts))
f.close()
查看:
import pickle
f = open('account.db','rb')
account_db = pickle.loads(f.read())
print (account_db)
- 对账户中的余额进行操作
import pickle
# 将存储了accounts这个持久化数据的文件赋值给变量
acc_file_name = 'account.db'
# 以二进制文件制度的方式打开这个文件
account_file = open(acc_file_name,'rb')
# 对序列化后的文件内容进行反序列化
account_dic = pickle.loads(account_file.read())
account_file.close() # 关闭文件
# 对读取出来的序列化内容进行修改(修改对应的余额)
account_dic[1000]['balance'] -= 20
# 以二进制只写的方式打开存储了持久化数据的文件
f = open(acc_file_name,'wb')
# 将修改后的内容写入到文件中
f.write(pickle.dumps(account_dic))
f.close()
检查修改后的结果
import pickle
f = open('account.db','rb')
account_db = pickle.loads(f.read())
print (account_db)
版权声明:本文为weixin_46108954原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。