json、pickle区别

总结:

"""
json:
1.不是所有的数据类型否可以序列化,序列化返回结果为字符串
2.不能多次对同一文件序列化
3.json数据可以跨语言 pickle:
1.所有python数据类型都可以序列化,结果为字节串
2.可以多次对同一文件序列化
3.不能跨语言(只python)
"""

json

  • 序列化:将内存中的数据,转换成字节串,用以保存在文件或者网络传输,称为序列化过程

  • 反序列化:从文件中\网络中获取的数据,转换成内存中原来的数据类型,成为反序列化过程

"""
json模块
java脚本对象标记语言
把所有的东西都转换成字符串格式
"""
import json # 序列化:将数据转换为字符串,用以存储或者网络传输
# dumps:从内存到内存
res = json.dumps(10)
print(res) # "10" # 元组进行json转换后,会转换为列表
res = json.dumps((1, 2, 3))
print(res) # "[1, 2, 3]"
lst = json.loads(res)
print(type(lst)) # <class 'list'>
print(lst) # [1, 2, 3] res = json.dumps([1, 2, 3, 4])
print(res) # "[1, 2, 3, 4]" res = json.dumps({"name":"张三", "age": 20})
print(res) # "{"name": "\u5f20\u4e09", "age": 20}" # set不能转换成json字符串
# res = json.dumps(set("abc"))
# print(res) # TypeError: Object of type 'set' is not JSON serializable
# tup1 = (1, 2, 3)
# # print(set(tup1))
# res = json.dumps(set(tup1))
# print(res) # dump:从内存到外边 写入到文件使用dump
# dic = {"name":"张三", "age": 20}
# with open("aa.txt", encoding="utf-8", mode="at") as f:
# # json.dump([1, 2, 3], f) # 把列表转换为json字符串,然后写入文件
# json.dump(dic, f) # 反序列化:把json字符串转换成内存中存储的数据类型,如:列表,字符串,字典 # 元组进行json转换后,再次反序列化后显示结果为:列表
# res = json.dumps((1, 2, 3))
# print(res) # "[1, 2, 3]"
# lst = json.loads(res)
# print(type(lst)) # <class 'list'>
# print(lst) # [1, 2, 3] # 从文件中反序列化
# with open("aa.txt", encoding="utf-8") as f1:
# res = json.load(f1) # 不能一次反序列化多次序列化的数据
# print(type(res))
# print(res) # 内存中写入数据
with open("json.str", mode="at", encoding="utf-8") as f:
f.write(json.dumps([1, 2, 3]) + "\n")
f.write(json.dumps({"name":"张三", "age":18}) + "\n") # 从文件中读取数据,转换为内存中存储的数据类型
with open("json.str", encoding="utf-8") as f1:
# res = json.loads(f1.readline().strip())
# print(res)
#
# res = json.loads(f1.readline().strip())
# print(res) for i in f1:
print(json.loads(i.strip()))

pickle

"""
pickle
序列化:可以把python的所有数据类型转换为字节串,
反序列化:将字节串转换为python中的数据类型
常用场景:和json一样,一次性读取,一次写入
""" import pickle
# 序列化元组
byts = pickle.dumps((1,2,3))
print(byts) # b'\x80\x03K\x01K\x02K\x03\x87q\x00.' # 反序列化元组
res = pickle.loads(byts)
print(res) # (1, 2, 3) # 序列化集合
byts = pickle.dumps(set("abc"))
print(byts) # b'\x80\x03cbuiltins\nset\nq\x00]q\x01(X\x01\x00\x00\x00aq\x02X\x01\x00\x00\x00bq\x03X\x01\x00\x00\x00cq\x04e\x85q\x05Rq\x06.' # 反序列化集合
res = pickle.loads(byts)
print(res) # {'a', 'b', 'c'} # 使用pickle写入文件 二进制不能指定utf-8编码
with open("pickle.str", mode="ab") as f:
pickle.dump(set("abcd"), f)
pickle.dump({"name":"张三", "age":18}, f) with open("pickle.str", mode="rb") as f1:
for i in range(2):
res = pickle.load(f1)
print(res)

最新文章

  1. 疑难问题解决备忘录(3)——ubuntu12.04配置vsftp本地用户登录
  2. 如何获取hibernate代理类代理的实际对象实例?
  3. Aoite 系列(01) - 比 Dapper 更好用的 ORM
  4. 如何离线安装chrome插件【转】
  5. IP碎片原理:攻击和防护
  6. MySQL Order By实现原理分析和Filesort优化
  7. String.Format使用方法
  8. 003-C运算符
  9. Cg(C for Graphic)标准函数库之数学函数与几何函数
  10. C#隐藏tabcontrol
  11. J2SE基本数据结构
  12. PL/SQL学习笔记程序单元
  13. ansible的高级应用-roles
  14. 中国剩余定理poj1006
  15. [No0000EE]主要的宏观经济指标查询
  16. Bootstrap学习笔记-布局
  17. 软件RAID
  18. 安装ectouch点击安装按钮无反应
  19. 给scrapy添加代理IP
  20. 牛客网多校训练第一场 D - Two Graphs

热门文章

  1. nginx openssl升级支持http2
  2. Flume数据采集结合etcd作为配置中心在爬虫数据采集处理中的架构实践。
  3. 一篇漫画故事带你理解透HTTPS(上)
  4. 30款Django 常用的软件包
  5. FastDFTJava客户端使用
  6. 【tensorflow2.0】处理图片数据-cifar2分类
  7. 空间复杂度(Space Complexity)
  8. Python魔法缓存,以数字开始
  9. Java哈希表入门
  10. Disruptor 基础篇