Python json模块 pickle模块

序列化模块

在 Python 中,序列化的主要目的是将数据对象转换为可以存储或传输的格式,以便稍后可以将其重新创建为原始对象。这种过程非常有用,因为它允许我们以一种可以跨越不同系统和平台的方式保存和交换数据。

以下是一些为什么我们需要序列化的原因:

  1. 数据的持久性:我们可能希望将某些数据存储在磁盘上,以便在将来的某个时间点再次访问它。例如,一个网站的登录信息可能需要在用户下次访问网站时重新使用。序列化允许我们将这些数据对象持久化到磁盘上,然后在需要时将其恢复。
  2. 进程间通信:在分布式系统中,不同的进程或机器需要共享数据。这些进程可能无法直接共享原始数据对象,因为它们可能使用不同的内存地址空间或不同的数据表示。通过将数据对象序列化为一种可共享的格式(如JSON、XML、二进制等),我们可以使其在不同的进程之间进行通信。
  3. 网络传输:当我们在网络上发送数据时,通常需要将数据对象转换为一种通用的格式,以便在不同的系统和平台之间进行传输。序列化允许我们将数据对象转换为这种通用格式,以便在网络上传输,然后在接收端将其恢复为原始对象。
  4. 对象的克隆:有时我们需要创建对象的副本,但不想复制整个对象树。通过序列化对象并将其反序列化为一个新的对象,我们可以快速且轻松地创建对象的副本。

因此,序列化对于实现数据的持久性、进程间通信、网络传输以及对象的复制等方面是必需的。在 Python 中,我们通常使用 picklejsonxmlmarshal 等模块来进行序列化和反序列化操作。

json模块

Json模块提供了四个功能:dumps、dump、loads、load

dumps和loads

dumps: 序列化:将一个字典转换成一个字符串

loads: #反序列化:将一个字符串格式的字典转换成一个字典

import json
d = {"nane": "lgj", 'age': 18}
ret=json.dumps(d)
print(ret,type(ret))  #{"nane": "lgj", "age": 18} <class 'str'>
a=json.loads(ret)
print(a,type(a)) #{'nane': 'lgj', 'age': 18} <class 'dict'>

load和dump

import json

d = {"nane": "lgj", 'age': 18}
with open("1.txt", "w", encoding="utf-8") as f:
    json.dump(d, f) #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
with open("1.txt", "r", encoding="utf-8") as f:
    # print(f.read())
    dic = json.load(f) #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
    print(dic, type(dic))

ensure_ascii关键字参数

dump把字典格式的变量,转成json字符串时,对非英文字母,进行了utf-8编码,为了能正常使用显示中文,也为了方便其他软件读取文件,dump提供了ensure_ascii=False,这样就不会对非英语字符编码了

pickle模块

pickle模块 和 json功能系列化和反系列化使用方法一样

pickle模块可以把python中任意的数据类型序列化

pickle序列化之后的结果是二进制的

import pickle

d = {"nane": "lgj", 'age': 18}
ret=pickle.dumps(d)
print(ret) #b'\x80\x04\x95\x1a\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x04nane\x94\x8c\x03lgj\x94\x8c\x03age\x94K\x12u.'

 pickle模块 和 json模块的区分

json模块支持:json能够序列化的数据类型是有限的:dict list, tuple str  int, float True False  None

pickle模块可以把python中任意的数据类型序列化

json模块序列化和反序列化其他编程语言都可以正常调用,而pickle模块列化和反序列化只能在python内部使用,所有我们只用是根据自己的实际情况选择使用!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值