首页 > 代码库 > python序列化 pickle,json模块

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 : 2556688@qq.com,
        password : abc123,
        balance : 10000,
        bank_acc : {
            ICB : 23123123123,
            CCB : 28321831823123
        }

    },
    xiaohong :{
            name : buzhibujue,
            emai : 333333@qq.com,
            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 = http://www.mamicode.com/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 : 2556688@qq.com,
        password : abc123,
        balance : 10000,
        bank_acc : {
            ICB : 23123123123,
            CCB : 28321831823123
        }

    },
    xiaohong :{
            name : buzhibujue,
            emai : 333333@qq.com,
            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 = http://www.mamicode.com/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模块