序列化与反序列化
序列化:把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))
执行结果:
案例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)
执行结果:
关于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))
执行结果:
案例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))
执行结果:
案例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))
案例5-3:对象的pickle使用
案例5-4:jupyter上使用pickle
new_data.to_pickle('C:\\data_0921.pickle')
new_data = pd.read_pickle('C:\\data_0921.pickle')