Python与Json、pickle模块

下面介绍Python如何使用Json、Pickle模块

      这两个模块用于序列化

一、什么是序列化

     #序列化:内存----》字符串 pickle.dumps  、pickle.dump

     将内存中的数据转换为字符串,保存在本地的过程,叫序列化


    #反序列化:字符串-----》内存 pickle.loads  、pickle.load

    从将本地硬盘中的数据读到内存中的过程,叫反序列化

 

二、Python与Json模块

A、json,用于字符串 和 python数据类型间进行转换;

B、Json模块提供了四个功能:dumps、dump、loads、load;

C、示例代码:

import  json

data={'k1':123,'k2':'Hello'}
#json.dumps 将数据通过特殊的形式转换为所有程序语言都认识的字符串
j_str=json.dumps(data)
print(j_str) #json.dump 将数据通过特殊的形式转换为所有程序语言都认识的字符串,并写入文件 with open(
'result.json','w') as fp: json.dump(data,fp)

执行结果:

 

三、Python与Pickle模块

A、pickle,用于python特有的类型 和 python的数据类型间进行转换

B、pickle模块提供了四个功能:dumps、dump、loads、load;

C、示例代码:

 

import  pickle

data={'k1':123,'k2':'Hello'}
#pickle.dumps 将数据通过特殊的形式转换为只有python程序语言认识的字符串
p_str=pickle.dumps(data)
print(p_str)

#pickle.dump将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件
with open('result.pk','w') as fp:
    pickle.dump(data,fp)

 执行结果:

 

四、事例演绎:pickle模块

picklein.py:序列化过程

 

import  pickle
#往文件只写两种格式数据类型:byte与字符串
account={
    "id":6225353234,
    "credit":15000,#credit card
    "balance":8000,
    "expire_date":"2020-5-21",
    "password":"sdfsf"
}
# f = open("account.db","w")
# f.write(str(account))
# print(str(account))
# f.close()

f = open("account.db","wb")
# f.write(pickle.dumps(account))等同下一句语句
pickle.dump(account,f)
f.close()

 

pickleout.py反序列化过程

#序列化:内存----》字符串  pickle.dumps
#反序列化:字符串-----》内存  pickle.loads

# f=open("account.db","r")
# account=eval(f.read()) #eval数据转换
# print(account)
# print(account['id'])

import  pickle
f=open("account.db","rb")
# account=pickle.loads(f.read())等同下一句语句
account=pickle.load(f)

print(account)
print(account['id'])

# account['balance'] -=3400
# f = open("account.db","wb")
# f.write(pickle.dumps(account))
# f.close()

五、事例演绎:json模块

jsonin.py序列化过程:

 

import json as pickle
#往文件只写两种格式数据类型:byte与字符串
account={
    "id":6225353234,
    "credit":15000,#credit card
    "balance":8000,
    "expire_date":"2020-5-21",
    "password":"sdfsf"
}
# f = open("account.db","w")
# f.write(str(account))
# print(str(account))
# f.close()

f = open("account.json","w")
# f.write(pickle.dumps(account))等同下一句语句
pickle.dump(account,f)
f.close()

 

jsonout.py反序列化过程:

 

#序列化:内存----》字符串  pickle.dumps
#反序列化:字符串-----》内存  pickle.loads

# f=open("account.db","r")
# account=eval(f.read()) #eval数据转换
# print(account)
# print(account['id'])

import json as pickle
f=open("account.json","r")
# account=pickle.loads(f.read())等同下一句语句
account=pickle.load(f)

print(account)
print(account['id'])

# account['balance'] -=3400
# f = open("account.db","wb")
# f.write(pickle.dumps(account))
# f.close()

 

六、Json与Pickle两个模块区别

      A、 Pickle模块支持Python中任何字符

      示例:

import  pickle
import datetime
#往文件只写两种格式数据类型:byte与字符串
account={
    "id":6225353234,
    "credit":15000,#credit card
    "balance":8000,
    "expire_date":"2020-5-21",
    "password":"sdfsf",
    "register_date":datetime.datetime.now()
}
# f = open("account.db","w")
# f.write(str(account))
# print(str(account))
# f.close()

f = open("account.db","wb")
# f.write(pickle.dumps(account))等同下一句语句
pickle.dump(account,f)
f.close()

执行结果:成功

B、 Json只支持str,int ,float, set ,dict, list, tuple

示例:

 

import json as pickle
import datetime
#往文件只写两种格式数据类型:byte与字符串
account={
    "id":6225353234,
    "credit":15000,#credit card
    "balance":8000,
    "expire_date":"2020-5-21",
    "password":"sdfsf",
    "register_date":datetime.datetime.now()
}
# f = open("account.db","w")
# f.write(str(account))
# print(str(account))
# f.close()

f = open("account.json","w")
# f.write(pickle.dumps(account))等同下一句语句
pickle.dump(account,f)
f.close()

 执行结果:失败

七、Json与Pickle使用时要注意的地方

        1、从以上的比较来看,这两个模块使用的方式是一样的,唯一区别就是在Python中,Pickle支持全部数据类型,Json支持的数据类型相对比较少

         2、Json与Pickle允许dump多次,也允许load多次,但由于读取时没有循环功能,因为建议最好只允许dump一次。

 

 

      

 

posted @ 2018-01-24 20:36  xiekejian  阅读(152)  评论(0编辑  收藏  举报