Learn day6

1.模块

1.1 pickle模块
# ### pickle 序列化模块 import pickle """ 序列化: 把不能够直接存储的数据变得可存储 反序列化: 把数据恢复成原本的数据格式 serialize 序列化 unserialize 反序列化 """ # 正常情况下,不能够直接把容器类型数据等直接存储在文件当中 """ with open("ceshi.txt",mode="w",encoding="utf-8") as fp: lst = [1,2,3] fp.write(lst) """ #dumps 把任意对象序列化成一个bytes lst = [1,2,3,4,5] res = pickle.dumps(lst) print(res) #loads 把任意bytes反序列化成原来数据 res = pickle.loads(res) print(res,type(res)) # 序列化函数 def func(): print("我是一个函数") res = pickle.dumps(func) print(res) # 反序列化函数 func = pickle.loads(res) func() # 序列化迭代器 from collections import Iterator,Iterable it = iter(range(10)) print(isinstance(it,Iterator)) res = pickle.dumps(it) print(res) res = pickle.loads(res) print(res) for i in res: print(i) # dumps 和 loads 把数据存储在文件 setvar = {"a","b"} with open("ceshi.txt",mode="rb+") as fp: res = pickle.dumps(setvar) fp.write(res) # 读取内容的时候,先把光标移动的文件行首. fp.seek(0) res2 = fp.read() print(res2) setvar = pickle.loads(res2) print(setvar,type(setvar)) #dump 把对象序列化后写入到file-like Object(即文件对象) def func2(): print("我是func2") with open("ceshi02.txt",mode="wb") as fp: # 参数1:要序列化的数据 参数2:对应的文件对象 pickle.dump(func2,fp) #load 把file-like Object(即文件对象)中的内容拿出来,反序列化成原来数据 with open("ceshi02.txt",mode="rb") as fp: func = pickle.load(fp) # 调用函数 func() # pickle模块可以序列化所有的数据类型.

1.2 json模块

# ### json
import json
"""
json可以序列化数据,转化成一个字符串.
json格式的数据,可以让所有的编程语言都能够识别,
有数据类型的限制:bool float int list tuple dict str None
"""

# 第一组:dumps 和 loads 用来序列化或反序列化字符串
"""
ensure_ascii=True 是否显示中文 设置ensure_ascii=False 显示中文
sort_keys=True 对字典的键按照ascii进行排序
"""
dic = {"name":"李祖清","age":58,"sex":"man","family":["爸爸","妈妈","姐姐","妹妹"]}
res = json.dumps(dic,ensure_ascii=False,sort_keys=True)
print(res,type(res))

dic = json.loads(res)
print(dic,type(dic))

# 第二组: dump 和 load 用来对数据进行存储
dic = {"name":"李祖清","age":58,"sex":"man","family":["爸爸","妈妈","姐姐","妹妹"]}
with open("ceshi03.json",mode="w",encoding="utf-8") as fp:
json.dump(dic,fp,ensure_ascii=False)

with open("ceshi03.json",mode="r",encoding="utf-8") as fp:
dic = json.load(fp)

print(dic,type(dic))

# json 和 pickle 两个模块的区别?

# json 用法特征:
"""
json 可以连续dump,但是不能连续load
load 只可以load一次,它是一次性把所有的数据作为一个整体来进行转化
可以使用loads 来进行解决
"""
dic1 = {'a':1,"b":2}
dic2 = {"c":3,"d":4}

with open("ceshi04.json",mode="w",encoding="utf-8") as fp:
json.dump(dic1,fp)
fp.write("\n")
json.dump(dic2,fp)
fp.write("\n")

# error 只能load一次,是一次性把所有数据转化.
"""
with open("ceshi04.json",mode="r",encoding="utf-8") as fp:
res = json.load(fp)
print(res)
"""
# 解决方式
with open("ceshi04.json",mode="r",encoding="utf-8") as fp:
for line in fp:
res = json.loads(line)
print(res)


# pickle 用法特征:
import pickle
"""
pickle 可以连续dump,也可以连续load
"""
dic1 = {'a':1,"b":2}
dic2 = {"c":3,"d":4}

with open("ceshi05.pkl",mode="wb") as fp:
pickle.dump(dic1,fp)
pickle.dump(dic2,fp)

with open("ceshi05.pkl",mode="rb") as fp:
try:
while True:
dic = pickle.load(fp)
print(dic)
except:
pass
print(333)

# 文件对象是迭代器么? 是的!
from collections import Iterator
print(isinstance(fp,Iterator))

"""
try ... except ...
把有问题的代码直接卸载try这个代码块当中,
如果出现异常,直接走except这个代码块,防止报错终止程序.
try:
print(wangwendashuaiguo)
except:
pass
"""


# 总结:
"""

# json 和 pickle 两个模块的区别:
(1)json序列化之后的数据类型是str,所有编程语言都识别,
但是仅限于(int float bool)(str list tuple dict None)
json不能连续load,只能一次性拿出所有数据
(2)pickle序列化之后的数据类型是bytes,
所有数据类型都可转化,但仅限于python之间的存储传输.
pickle可以连续load,多套数据放到同一个文件中

"""


















 

 

上一篇:L1-039 古风排版 (20 分)


下一篇:Qt重绘机制