json和pickle模块

news/2025/3/19 12:04:41/

目录

❤  json和pickle模块

序列化

json

pickle


python从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129328397?spm=1001.2014.3001.5502

❤  json和pickle模块

序列化

把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening。

序列化的优点:

  • 持久保存状态:内存是无法永久保存数据的,当程序运行了一段时间,我们断电或者重启程序,内存中关于这个程序的之前一段时间的数据(有结构)都被清空了。但是在断电或重启程序之前将程序当前内存中所有的数据都保存下来(保存到文件中),以便于下次程序执行能够从文件中载入之前的数据,然后继续执行,这就是序列化。
  • 跨平台数据交互:序列化时不仅可以把序列化后的内容写入磁盘,还可以通过网络传输到别的机器上,如果收发的双方约定好实用一种序列化的格式,那么便打破了平台/语言差异化带来的限制,实现了跨平台数据交互。

json

Json序列化并不是python独有的,json序列化在java等语言中也会涉及到,因此使用json序列化能够达到跨平台传输数据的目的。

json数据类型和python数据类型对应关系表

Json类型Python类型
{}dict
[]list
"string"str
520.13int或float
true/falseTrue/False
nullNone

json模块序列化和反序列化的一个过程如下图所示

 

import json
struct_data = {'name': 'json', 'age': 23, 'sex': 'male'}
print(struct_data, type(struct_data))

{'name': 'json', 'age': 23, 'sex': 'male'} <class 'dict'>

data = json.dumps(struct_data)
print(data, type(data))

{"name": "json", "age": 23, "sex": "male"} <class 'str'>

# 注意:无论数据是怎样创建的,只要满足json格式(如果是字典,则字典内元素都是双引号),就可以json.loads出来,不一定非要dumps的数据才能loads
data = json.loads(data)
print(data, type(data))

{'name': 'json', 'age': 23, 'sex': 'male'} <class 'dict'>

# 序列化
with open('Json序列化对象.json', 'w') as fw:json.dump(struct_data, fw)
# 反序列化
with open('Json序列化对象.json') as fr:data = json.load(fr)
print(data)

{'name': 'json', 'age': 23, 'sex': 'male'}

pickle

Pickle序列化和所有其他编程语言特有的序列化问题一样,它只能用于Python,并且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存那些不重要的数据,即不能成功地反序列化也没关系。但是pickle的好处是可以存储Python中的所有的数据类型,包括对象,而json不可以。

pickle模块序列化和反序列化的过程如下图所示

import pickle
struct_data = {'name': 'json', 'age': 23, 'sex': 'male'}
print(struct_data, type(struct_data))

{'name': 'json', 'age': 23, 'sex': 'male'} <class 'dict'>

data = pickle.dumps(struct_data)
print(data, type(data))

b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00jsonq\x02X\x03\x00\x00\x00ageq\x03K\x17X\x03\x00\x00\x00sexq\x04X\x04\x00\x00\x00maleq\x05u.' <class 'bytes'>

data = pickle.loads(data)
print(data, type(data))

{'name': 'json', 'age': 23, 'sex': 'male'} <class 'dict'>

# 序列化(注意:pickle模块需要使用二进制存储,即'wb'模式存储)
with open('Pickle序列化对象.pkl', 'wb') as fw:pickle.dump(struct_data, fw)
# 反序列化
with open('Pickle序列化对象.pkl', 'rb') as fr:pickle = pickle.load(fr)
print(data)

{'name': 'json', 'age': 23, 'sex': 'male'}


http://www.ppmy.cn/news/103643.html

相关文章

Java并发体系-第二阶段-锁与同步-[3](仅做了解吧不好理解)

synchronized保证三大特性 synchronized保证原子性的原理 对num;增加同步代码块后&#xff0c;保证同一时间只有一个线程操作num;。就不会出现安全问题。 synchronized保证可见性的原理 synchronized保证可见性的原理&#xff0c;执行synchronized时&#xff0c;会对应lock…

热力学统计物理专题:德拜模型

简正振动的固体模型 由于固体晶格结点上相邻原子之间距离很小&#xff08;约为 米量级&#xff09;&#xff0c;故原子间存在强烈的相互作用&#xff0c;而非相互独立。在温度不高时&#xff0c;原子只在其平衡位置附近作微振动&#xff0c;且具有不同的振动频率。设系统有…

算法27:从暴力递归到动态规划(2)

上一题比较简单&#xff0c;下面来一道比较难的题目。 假设有排成一行的N个位置&#xff0c;记为1~N&#xff0c;N 一定大于或等于 2 开始时机器人在其中的M位置上(M 一定是 1~N 中的一个) 如果机器人来到1位置&#xff0c;那么下一步只能往右来到2位置&#xff1b; 如果机…

linux环境下安装gitlab

前几天跟朋友聊天时说到gitlab版本控制。其实&#xff0c;之前也对它只是知道有这个东西&#xff0c;也会用。只是对于它的安装和配置&#xff0c;那我还是没整过。这两天&#xff0c;我找了一下网上的资料&#xff0c;还是写下吧。 一安装&#xff1a; 按网上所说&#xff0c;…

【系统工具】Rundll32:Windows系统中的神奇工具,你知道吗?

▒ 目录 ▒ &#x1f6eb; 问题描述环境 1️⃣ Rundll32的使用使用方法 - cmd使用方法 - 运行窗口/任务管理器/资源管理器 2️⃣ 常见应用场景运行js或vbs的脚本代码执行命令绕过杀毒软件的作法&#xff1f;修改注册表增加一个服务修复Internet Explorer其它常见命令 3️⃣ 原理…

Kubernetes入门指南

Kubernetes是一个用于容器编排和管理的开源平台。它可以帮助您简化容器化应用程序的部署、扩展和管理。本指南将引导您完成Kubernetes的基本概念和入门操作。 1. 安装Kubernetes集群 首先&#xff0c;您需要设置Kubernetes集群。以下是一些常见的安装选项&#xff1a; Minik…

IIC接口

一、IIC总线简介 IIC总线是由飞利浦公司推出的一种串行、同步、半双工通信协议。它由两条线组成&#xff0c;时钟线&#xff08;SCL&#xff09;和数据线&#xff08;SDA&#xff09;。主机产生通信用的时钟&#xff0c;可以产生起始信号和结束信号来开始或者结束一次通信。 …

docker-file镜像制作案例

jenkins docker镜像制作 软件包 链接&#xff1a;https://pan.baidu.com/s/1VZpse-vLFYsyWnhSu6u2gg 提取码&#xff1a;4545 1.创建工作目录 mkdir -p /data/soft && cd /data/soft # 上传文件 略 2.jenkins-docker-file # vi jenkins_dockerFile FROM centos…