ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Learn day6

2019-08-03 12:57:51  阅读:185  来源: 互联网

标签:fp day6 res json Learn print 序列化 pickle


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,多套数据放到同一个文件中

"""


















 

 

标签:fp,day6,res,json,Learn,print,序列化,pickle
来源: https://www.cnblogs.com/NGU-PX/p/11294439.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有