Python模块知识4:序列化Json/pickle

序列化与反序列化

序列化:把Python的基本数据类型转为字符串

反序列化:把字符串转为Python的基本数据类型


Python中用于序列化的两个模块:

  • json     用于【字符串】和 【python基本数据类型】 间进行转换;由于字符串是各语言通用的,json更适合跨语言;但仅支持dict、list、tuple、str、int、flost、True、False

  • pickle   用于【python特有的类型】 和 【python基本数据类型】间进行转换,支持任何类型,更适合所有类型的序列化,比如面向对象

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

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


关于json:

  • JSON:JavaScript 对象表示法(JavaScript Object Notation)。

  • JSON 是存储和交换文本信息的语法。类似 XML。

  • JSON 比 XML 更小、更快,更易解析


案例1:json转换过程,dumps、loads;内部涉及字符串的时候一定要使用双引号,如li=["a","b"],而不是li=['a','b']

import json
dic={"k1":"v1","k2":"v2"}
print('dic',dic,type(dic))
result=json.dumps(dic) # 将python基本数据类型转为字符串                 
print('result',result,type(result))
dic2=json.loads(result)#将字符串转为基本数据类型 ,                     
print('dic2',dic2,type(dic2))

执行结果:

640?wx_fmt=png&wxfrom=5&wx_lazy=1

案例2:json读取并写入文件中,dump、load

import  json
li=["a","b"]
json.dump(li,open('db','w'))#执行结果,db文件中写入li的内容
r=json.load(open('db','r'))#读文件操作
print(r,type(r))

执行结果:

['a', 'b'] <class 'list'>

案例3:基于天气的API获取天气相关的json

import requests
import json
r=requests.get('http://wthrcdn.etouch.cn/weather_mini?city=北京')
r.encoding='utf-8'
dic=json.loads(r.text)
print(dic)

执行结果:0?wx_fmt=png


关于pickle的应用:


案例4:pickle的dumps和loads

import pickle
dic={"k1":"v1","k2":"v2"}
print('dic',dic,type(dic))
result=pickle.dumps(dic) # 将python基本数据类型转为字节
print('result',result,type(result))
dic2=pickle.loads(result)#将字符串转为基本数据类型
print('dic2',dic2,type(dic2))

执行结果:

0?wx_fmt=png


案例5-1:pickle的写入文件和导出文件,类型需要加b

import pickle

li=["a","b"]
pickle.dump(li,open('hh','wb'))#类型需要加b
r=pickle.load(open('hh','rb'))#读文件操作,需要加b
print(r,type(r))

执行结果:

0?wx_fmt=png

案例5-2:修改导入文件的内容

import pickle
account_info={'a1':['hh',222,20],
'a2':['rr',444,40]
}
pickle.dump(account_info,open('acc.pkl','wb'))
t=pickle.load(open('acc.pkl','rb'))
print ('初次导入',t,type(t))

#修改字典中的一个值,重新存储,再次调用
account_info['a2'][1]=555
account_info['a2'][2]=50
pickle.dump(account_info,open('acc.pkl','wb'))
f=pickle.load(open('acc.pkl','rb'))
print ("修改值",f,type(f))
#添加一个新的字段
account_info['a3']=['ppp',666,60]
pickle.dump(account_info,open('acc.pkl','wb'))
y=pickle.load(open('acc.pkl','rb'))
print ("添加新的值",y,type(y))

0?wx_fmt=png


案例5-3:对象的pickle使用

0?wx_fmt=png

案例5-4:jupyter上使用pickle

new_data.to_pickle('C:\\data_0921.pickle')

new_data = pd.read_pickle('C:\\data_0921.pickle')


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/PbGc396Dwxjb77F2je/article/details/78950468
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

Python模块知识4:序列化Json/pickle

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭