Day18 序列化模块pickle json

序列化模块 pickle / json

pickle

序列化: 将不能直接存储的数据变的可存储,这个过程叫做序列化 
反序列化: 将文件中的数据拿出来,回复成原来的数据类型,这个过程叫做反序列化
在文件中存储的只能是字符串和字节流.不能是其他数据
错误示例:
lst = [a,b,c]
with open("1.txt","w",encoding="utf-8") as fp:
    fp.write(lst)    # error lst 为列表

pickle的使用

# dump 把对象序列化后写入到文件中  (必须为wb模式)
import pickle
lst = [a,b,c]
with open("1.txt","wb") as fp:
	pickle.dump(lst,fp)  
# load  把文件对象中的内容拿出来,反序列化为原来的类型
with open("test01.txt","rb") as fp:
	res = pickle.load(fp)
	print(res)  
# dumps 把任意对象序列化为bytes
lst = {"a":1,"b":2}
res = pickle.dumps(lst)
print(res) # b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02K\x02u.'
# loads 把任意bytes反序列化为原来的数据
lst = pickle.loads(res)
print(lst) #  {'a': 1, 'b': 2}

json模块

json模块 (将不能存储的数据序列化变得可存储)
反序列化: 把文件中的数据拿出来,恢复成原来的数据类型,这个过程叫做反序列。
与pickle模块的区别:
 (1)pickle可以读取所有数据类型
 json 不可以读取 complex,set(如php中没有这两种数据类型)
 (2)所有的编程语言都能识别json,应用广泛
 (3) pickle 序列化存储的是字节流,只能在Python之间存储
  json序列化后的数据类型是字符串,所有的编程语言都能识别
 (4) pickle 可以连续dump 也可以连续load,因为[pickle在存储的时候会在末尾加上结束符,多套数据放到同一个文件中
 (5) json可以连续dump 不可以连续load 只能一次性load(全部反序列化出来)
 (6)json适合用来交流,pickle适合用来存储 

json用法

(1)dumps 将数据序列化为字符串
import json
dic = {'a':1,'b':2}
res = json.dumps(dic,ensure_ascii=False,sort_keys=True)
#   ensure_ascii=False 显示中文 sort_keys=True 对字典的键进行排序
print(res,type(res)) # {"a": 1, "b": 2} <class 'str'>

(2) loads 反序列化为原来的类型
dic = json.loads(res)
print(dic,type(dic)) # {'a': 1, 'b': 2} <class 'dict'>

(1)dump 将数据序列化后存储到文件 (存储为字符串)
dic = {'a':1,'b':2,'c':"咦嘻"}
with open('test1.txt','w',encoding='utf-8') as fp:
 json.dump(dic,fp,ensure_ascii=True)  # {"a": 1, "b": 2, "c": "\u54a6\u563b"}
# ensure_ascii 为True则按ascii码存储,若要显示中文应改为False

(2)load 
with open("tese1.txt",mode="r",encoding="utf-8") as fp:
 dic = json.load(fp)
 print(dic)
针对于json不能连续load的问题

# 解决方法
with open('1.txt','r',encoding='utf-8') as fp:
    for i in fp:
        dic = json.loads(fp)
        print(dic)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值