python序列化 pickle,json模块
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python序列化 pickle,json模块相关的知识,希望对你有一定的参考价值。
Python中用于序列化的两个模块
- json 用于【字符串】和 【python基本数据类型】 间进行转换
- pickle 用于【python特有的类型】 和 【python基本数据类型】间进行转换
Json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load
pickle.dump[ojb, file [,protocol]
序列化对象,并将结果数据流写入到文件对象中。
必填参数ojb表示要封装的对象
必填参数file表示ojb写入的文件对象,file文件必须是二进制的模式打开,如‘rb’
参数protocol是序列化模式,默认值为0。
pickle.load(file)
反序列化对象。将文件中的数据解析为一个Python对象。
必填参数file必须以二进制可读模式打开,即“rb”,其他都为可选参数
pickle.dumps(obj)
以字节对象形式返回封装的对象,不需要写入文件中
pickle.loads(bytes_object):
从字节对象中读取被封装的对象,并返回
pickle可能出现三种异常:
1. PickleError:封装和拆封时出现的异常类,继承自Exception
2. PicklingError: 遇到不可封装的对象时出现的异常,继承自PickleError
3. UnPicklingError: 拆封对象过程中出现的异常,继承自PickleError
下面是一个修改文件的例子:
import pickle account = { ‘xiaoming‘ :{ ‘name‘ : ‘mingrizhaoyang‘, ‘emai‘ : ‘[email protected]‘, ‘password‘ : ‘abc123‘, ‘balance‘ : 10000, ‘bank_acc‘ : { ‘ICB‘ : ‘23123123123‘, ‘CCB‘ : ‘28321831823123‘ } }, ‘xiaohong‘ :{ ‘name‘ : ‘buzhibujue‘, ‘emai‘ : ‘[email protected]‘, ‘password‘ : ‘qaq123‘, ‘balance‘ : 10000, ‘bank_acc‘ : { ‘ICB‘ : ‘12372847384‘, ‘CCB‘ : ‘12324452661‘ } } } with open(‘acc_data‘, ‘wb‘) as f: pickle.dump(account, f)
import pickle,pprint with open(‘acc_data‘, ‘rb‘) as fb: data = pickle.load(fb) pprint.pprint(data)
import pickle fb = open(‘acc_data‘, ‘rb‘) ac_data = pickle.load(fb) #也可以 c_data = pickle.loads(fb.read()) ac_data["xiaohong"][‘balance‘] = ac_data["xiaohong"][‘balance‘] - 1000 fb.close() with open(‘acc_data‘, ‘wb‘) as f: pickle.dump(ac_data, f) #也可以 f.write(pickle.dumps(ac_data))
JSON用法与pickele 基本上是一样的,操作的文件不用转二进制就可以。
import json account = { ‘xiaoming‘ :{ ‘name‘ : ‘mingrizhaoyang‘, ‘emai‘ : ‘[email protected]‘, ‘password‘ : ‘abc123‘, ‘balance‘ : 10000, ‘bank_acc‘ : { ‘ICB‘ : ‘23123123123‘, ‘CCB‘ : ‘28321831823123‘ } }, ‘xiaohong‘ :{ ‘name‘ : ‘buzhibujue‘, ‘emai‘ : ‘[email protected]‘, ‘password‘ : ‘qaq123‘, ‘balance‘ : 10000, ‘bank_acc‘ : { ‘ICB‘ : ‘12372847384‘, ‘CCB‘ : ‘12324452661‘ } } } with open(‘acc_data‘, ‘w‘) as f: json.dump(account, f)
import json with open(‘acc_data‘, ‘r‘) as fb: data = json.load(fb) print(data)
import json # with open(‘acc_data‘, ‘r‘) as fb: # data = json.load(fb) fb = open(‘acc_data‘, ‘r‘) data = json.load(fb) data["xiaohong"][‘balance‘] = data["xiaohong"][‘balance‘] - 1000 with open(‘acc_data‘, ‘w‘) as f: json.dump(data, f)
以上是关于python序列化 pickle,json模块的主要内容,如果未能解决你的问题,请参考以下文章