Python9-模块2-序列化-day20

什么叫序列化——将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化

序列——字符串
序列化的目的
1、以某种存储形式使自定义对象持久化;
2、将对象从一个地方传递到另一个地方。
3、使程序更具维护性。

 
 
#json模块
# 通用的序列化格式
#只有很少的一部分数据类型能够通过json转化成字符串

#pickle模块
#所有的python中的数据类型都可以转化成字符串形式
#pickle序列化的内容只有python能理解
#且部分反序列化依赖代码



#shelve模块
#有了序列化句柄
#使用句柄直接操作
#json  dumps(序列化方法)  loads (反序列方法)
#可序列化:数字  字符串 列表 字典 元祖(元祖转化列表序列化)
# dic = {'k1':'v1'}
import json
print(type(dic),dic)
str_d = json.dumps(dic)   #序列化:将一个字典转换成一个字符串
print(type(str_d),str_d)
#注意,json转换完的字符串类型的字典中的字符串是由""表示的

dic_d = json.loads(str_d)  #反序列化:将一个字符串格式的字典转换成一个字典
#注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
print(type(str_d),str_d)

# 元祖序列化
dic = (1,2,3,4)
print(type(dic),dic)
str_d = json.dumps(dic)   #序列化:将一个字典转换成一个字符串
print(type(str_d),str_d)
#json dump load方法--文件相关的操作
import  json
dic = {'k1':'v1'}
f = open('fff','w',encoding='utf-8')
json.dump(dic,f)   #将字典序列化然后传到文件中
f.close()

import json
f =open('fff')
res = json.load(f)
f.close()
print(type(res),res)
#ensure_ascii=False 参数
import  json
dic = {'k1':'中国人','k2':'b'}
f = open('fff','w',encoding='utf-8')
json.dump(dic,f,ensure_ascii=False)   #将字典序列化然后传到文件中
f.close()
f =open('fff',encoding='utf-8')
res = json.load(f)
f.close()
print(type(res),res)


<class 'dict'> {'k2': 'b', 'k1': '中国人'}
# 一行一行写
l = [{'k':'111'},{'k':'111'},{'k':'111'}]
f = open('file','w')
import  json
for dic in l:
    str_dic = json.dumps(dic)
    f.write(str_dic+'\n')
f.close()
import  json
l = []
f = open('file')
for line in f:
    dic = json.loads(line.strip())
    l.append(dic)
f.close()
print(l)

pickle模块

#pickle
import pickle
dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = pickle.dumps(dic)
print(str_dic)  #一串二进制内容

dic2 = pickle.loads(str_dic)
print(dic2)    #字典

import time
struct_time  = time.localtime(1000000000)
print(struct_time)
f = open('pickle_file','wb')
pickle.dump(struct_time,f)
f.close()

f = open('pickle_file','rb')
struct_time2 = pickle.load(f)
print(struct_time2.tm_year)

b'\x80\x03}q\x00(X\x02\x00\x00\x00k1q\x01X\x02\x00\x00\x00v1q\x02X\x02\x00\x00\x00k2q\x03X\x02\x00\x00\x00v2q\x04X\x02\x00\x00\x00k3q\x05X\x02\x00\x00\x00v3q\x06u.'
{'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}

#分布dump和load  但是json不行
import time
struct_time1  = time.localtime(1000000000)
struct_time2  = time.localtime(2000000000)
f = open('pickle_file','wb')
pickle.dump(struct_time1,f)
pickle.dump(struct_time2,f)
f.close()

f = open('pickle_file','rb')
struct_time1 = pickle.load(f)
struct_time2 = pickle.load(f)
print(struct_time1.tm_year)
print(struct_time2.tm_year)
f.close()

2001
2033

猜你喜欢

转载自www.cnblogs.com/zhangtengccie/p/10348131.html