Python数据序列化技术:高效存储与传输的最佳实践
在现代软件开发中,数据序列化是一个关键环节,它允许我们将复杂的数据结构转换为可存储或可传输的格式,以便在不同的系统或程序之间共享和持久化。Python提供了多种数据序列化技术,每种技术都有其独特的性能优势和适用场景。本文将详细介绍几种强大的Python数据序列化技术,并通过示例代码展示如何使用它们。
1. pickle
:Python的通用序列化工具
pickle
是Python标准库中的一个模块,用于序列化和反序列化Python对象结构。它非常灵活,可以处理几乎所有类型的Python对象,但不适合用于跨语言的数据交换,因为其格式是特定于Python的。
示例代码
import pickle# 要序列化的数据
data = {'name': 'Alice','age': 30,'is_student': False
}# 序列化
with open('data.pkl', 'wb') as file:pickle.dump(data, file)# 反序列化
with open('data.pkl', 'rb') as file:loaded_data = pickle.load(file)print(loaded_data)
2. json
:轻量级的数据交换格式
json
模块用于处理JSON数据,这是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。json
格式在Web开发中非常常见,适用于跨语言的数据交换。
示例代码
import json# 要序列化的数据
data = {'name': 'Alice','age': 30,'is_student': False
}# 序列化
with open('data.json', 'w') as file:json.dump(data, file)# 反序列化
with open('data.json', 'r') as file:loaded_data = json.load(file)print(loaded_data)
3. msgpack
:高效的二进制JSON-like格式
msgpack
(MessagePack)是一种高效的二进制JSON-like格式,它比JSON更小、更快,适合用于网络传输和存储。msgpack
支持多种语言,因此可以用于跨语言的数据交换。
安装
pip install msgpack
示例代码
import msgpack# 要序列化的数据
data = {'name': 'Alice','age': 30,'is_student': False
}# 序列化
packed_data = msgpack.packb(data)# 反序列化
unpacked_data = msgpack.unpackb(packed_data)print(unpacked_data)
4. protobuf
:高效的跨语言数据交换格式
protobuf
(Protocol Buffers)是Google开发的一种语言无关、平台无关的序列化结构数据的方式。它非常适合用于网络传输和存储,具有高效、灵活和自动化的优点。protobuf
需要定义数据结构的schema文件,然后生成相应的代码。
安装
pip install protobuf
定义schema文件(person.proto
)
syntax = "proto3";message Person {string name = 1;int32 age = 2;bool is_student = 3;
}
生成Python代码
protoc --python_out=. person.proto
示例代码
from person_pb2 import Person# 创建Person对象
person = Person()
person.name = 'Alice'
person.age = 30
person.is_student = False# 序列化
serialized_data = person.SerializeToString()# 反序列化
new_person = Person()
new_person.ParseFromString(serialized_data)print(new_person.name)
print(new_person.age)
print(new_person.is_student)
5. numpy.save
和 numpy.load
:高效处理数值数据
对于数值数据,特别是大型数组,numpy
库提供了非常高效的序列化和反序列化方法。numpy.save
和numpy.load
可以快速保存和加载大型数组,性能优于pickle
。
示例代码
import numpy as np# 要序列化的数据
data = np.array([[1, 2, 3], [4, 5, 6]])# 序列化
np.save('data.npy', data)# 反序列化
loaded_data = np.load('data.npy')print(loaded_data)
6. pandas.to_pickle
和 pandas.read_pickle
:高效处理pandas数据结构
对于DataFrame和Series等pandas数据结构,pandas
库提供了to_pickle
和read_pickle
方法,这些方法基于pickle
,但进行了优化,可以更高效地处理pandas数据结构。
示例代码
import pandas as pd# 要序列化的数据
data = pd.DataFrame({'name': ['Alice', 'Bob'],'age': [30, 25],'is_student': [False, True]
})# 序列化
data.to_pickle('data.pkl')# 反序列化
loaded_data = pd.read_pickle('data.pkl')print(loaded_data)
总结
在选择数据序列化技术时,需要根据具体的应用场景和需求来决定。以下是一些选择建议:
- 通用性和灵活性:如果需要处理各种复杂的Python对象,
pickle
是一个不错的选择。 - 跨语言数据交换:如果需要在不同的编程语言之间交换数据,
json
和msgpack
是更好的选择。 - 高性能和网络传输:对于需要高效传输和存储的数据,
msgpack
和protobuf
提供了更好的性能。 - 数值数据:对于大型数值数组,
numpy.save
和numpy.load
提供了高效的序列化和反序列化方法。 - pandas数据结构:对于DataFrame和Series等pandas数据结构,
pandas.to_pickle
和pandas.read_pickle
提供了优化的序列化和反序列化方法。
通过合理选择和使用这些数据序列化技术,可以显著提高应用程序的性能和可维护性。希望本文的介绍和示例代码能帮助你在实际项目中更好地应用这些技术。
相关文章:
Python数据序列化技术:高效存储与传输的最佳实践
在现代软件开发中,数据序列化是一个关键环节,它允许我们将复杂的数据结构转换为可存储或可传输的格式,以便在不同的系统或程序之间共享和持久化。Python提供了多种数据序列化技术,每种技术都有其独特的性能优势和适用场景。本文将…...
大模型function calling:让AI函数调用更智能、更高效
大模型function calling:让AI函数调用更智能、更高效 随着大语言模型(LLM)的快速发展,其在实际应用中的能力越来越受到关注。Function Calling 是一种新兴的技术,允许大模型与外部工具或API进行交互,从而扩…...
HarmonyOS学习第12天:解锁表格布局的奥秘
表格布局初相识 不知不觉,我们在 HarmonyOS 的学习旅程中已经走到了第 12 天。在之前的学习里,我们逐步掌握了 HarmonyOS 开发的各种基础与核心技能,比如组件的基本使用、布局的初步搭建等,这些知识就像一块块基石,为我…...
基于 MetaGPT 自部署一个类似 MGX 的多智能体协作框架
MGX(由 MetaGPT 团队开发的 mgx.dev)是一个收费的多智能体编程平台,提供从需求分析到代码生成、测试和修复的全流程自动化功能。虽然 MGX 本身需要付费,但您可以通过免费服务和开源项目搭建一个类似的功能。以下是一个分步骤的实现…...
Cargo, the Rust package manager, is not installed or is not on PATH.
今天在Windows操作系统上通过pip 安装jupyter的时候遇到这个报错,Cargo, the Rust package manager, is not installed or is not on PATH.。 解决办法 官网:https://rustup.rs/# 下载:https://win.rustup.rs/x86_64 安装完成之后,…...
Spring AI:开启Java开发的智能新时代
目录 一、引言二、什么是 Spring AI2.1 Spring AI 的背景2.2 Spring AI 的目标 三、Spring AI 的核心组件3.1 数据处理3.2 模型训练3.3 模型部署3.4 模型监控 四、Spring AI 的核心功能4.1 支持的模型提供商与类型4.2 便携 API 与同步、流式 API 选项4.3 将 AI 模型输出映射到 …...
华为昇腾910b服务器部署DeepSeek翻车现场
最近到祸一台HUAWEI Kunpeng 920 5250,先看看配置。之前是部署的讯飞大模型,发现资源利用率太低了。把5台减少到3台,就出了他 硬件配置信息 基本硬件信息 按照惯例先来看看配置。一共3块盘,500G的系统盘, 2块3T固态…...
c++ 文件及基本读写总结
在 C 中,文件操作是非常重要的一部分,主要用于将数据存储到文件中,或者从文件中读取数据。C 标准库提供了fstream头文件,其中包含了用于文件操作的类,主要有ifstream(用于输入文件流,即从文件读…...
千峰React:组件与逻辑封装(上)
UI组件库及antd安装 UI组件库就是把页面的组件写好了,用的时候直接调用好了 进行一个安装的动作: 总之就是搭积木,可以调用里面写好的组件库拼接,也可以结合使用 antd布局和导航组件 组件总览 - Ant Design 这是通用部分 在用…...
Windows 10 远程桌面连接使用指南
目录 一、引言 二、准备工作 1、确认系统版本 2、服务器端设置 三、客户端连接 1、打开远程桌面连接程序 2、输入连接信息 3、输入登录凭证 4、开始使用远程桌面 四、移动端连接(以 iOS 为例) 1、下载安装应用 2、添加远程计算机 3、进行连接…...
使用Kali中的Metasploit生成木马控制Windows系统
使用Kali中的Metasploit生成木马控制Windows系统 (第九天 9.20) 一、kali及Metasploit kali基于debin的数字取证系统,上面集成很多渗透测试工具,其前身是BT5 R3(BrackTrack),在信息搜集方面发…...
Python与Web3.py库:构建去中心化应用的未来
Python与Web3.py库:构建去中心化应用的未来 在区块链的世界里,“去中心化”是最核心的理念之一,它赋予了用户更多的控制权和自由,消除了传统中心化系统中的单点故障和信任问题。而在这场技术革命中,Web3.0无疑是最受瞩…...
《Python实战进阶》No 8:部署 Flask/Django 应用到云平台(以Aliyun为例)
第8集:部署 Flask/Django 应用到云平台(以Aliyun为例) 2025年3月1日更新 增加了 Ubuntu服务器安装Python详细教程链接。 引言 在现代 Web 开发中,开发一个功能强大的应用只是第一步。为了让用户能够访问你的应用,你需…...
RAP: Efficient Text-Video Retrieval with Sparse-and-Correlated Adapter
标题:RAP:基于稀疏相关适配器的高效文本视频检索 原文链接:RAP: Efficient Text-Video Retrieval with Sparse-and-Correlated Adapter - ACL Anthology 发表:ACL-2024(NLP领域CCF A类) 摘要 文本-视频检索(TVR࿰…...
C++ ++++++++++
初始C 注释 变量 常量 关键字 标识符命名规则 数据类型 C规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存 整型 sizeof关键字 浮点型(实型) 有效位数保留七位,带小数点。 这个是保…...
用Python之requests库调用大型语言模型(LLM)API的流式输出与非流式输出比较
文章目录 1. 非流式输出与流式输出概述2. 非流式输出2.1 代码实例12.2 代码实例2 3. 流式输出3.1 流式输出的定义和作用3.2 流式输出适用的场景3.3 流式输出的实现方式与实现技术3.4 代码实例33.5 代码实例4 4. 小结 1. 非流式输出与流式输出概述 大模型收到输入后并不是一次性…...
JavaEE基础之- 过滤器和监听器Filter and Listener
目录 1. 过滤器 Filter 1.1. 初识过滤器 1.1.1. 过滤器概念 1.1.2. 过滤器例子 1.2. 过滤器详解 1.2.1. 过滤器生命周期 1.2.2. FilterConfig 1.2.3. FilterChain 1.1.4. 过滤器执行顺序 1.2.5. 过滤器应用场景 1.2.6. 过滤器设置目标资源 1.2.7. 过滤器总结 1.3 过滤…...
JavaAdv01——字节流和字符流
一、核心概念解析 1. 字节流(Byte Streams) 字节流家族: 输入流:InputStream(抽象类) FileInputStream ByteArrayInputStream BufferedInputStream 输出流:OutputStream FileOutputStream…...
HarmonyOS 5.0应用开发——多线程Worker和@Sendable的使用方法
【高心星出品】 文章目录 多线程Worker和Sendable的使用方法开发步骤运行结果 多线程Worker和Sendable的使用方法 Worker在HarmonyOS中提供了一种多线程的实现方式,它允许开发者在后台线程中执行长耗时任务,从而避免阻塞主线程并提高应用的响应性。 S…...
AI赋能传热学研究:创新与乐趣的深度融合
在科技飞速发展的当下,人工智能(AI)已逐渐渗透到各个领域,为不同行业带来了前所未有的变革与机遇。对于传热学研究而言,AI的介入不仅极大地提高了研究效率,还为研究者带来了全新的体验和思考。本文将深入探…...
Hive-03之传参、常用函数、explode、lateral view、行专列、列转行、UDF
大数据分析利器之hive 一、目标 掌握hive中select查询语句中的基本语法掌握hive中select查询语句的分组掌握hive中select查询语句中的join掌握hive中select查询语句中的排序 二、要点 1、hive的参数传递 1、Hive命令行 语法结构 hive [-hiveconf xy]* [<-i filename&…...
如何将Vue项目部署至 nginx
一、准备工作 1.确保安装了开发软件VS Code(此处可查阅安装 VS Code教程),确保相关插件安装成功 2.安装Node.js和创建Vue项目(此处可查阅安装创建教程) 3.成功在VS Code运行一个Vue项目(此处可查阅运行教…...
SwiftUI之状态管理全解析
文章目录 引言一、`@State`1.1 基本概念1.2 初始化与默认值1.3 注意事项二、`@Binding`2.1 基本概念2.2 初始化与使用2.3 注意事项三、`@ObservedObject`3.1 基本概念3.2 初始化与使用3.3 注意事项四、`@EnvironmentObject`4.1 基本概念4.2 初始化与使用4.3 注意事项五、`@Stat…...
Java-servlet(一)Web应用与服务端技术概念知识讲解
Java-servlet(一)Web应用与服务端技术概念知识讲解 前言一、Web 应用1.WEB CS BS 对比2.WEB 介绍3.web 与 http 的关系 二、servlet服务端技术1. 公共网关接口(CGI)2. servlet 是什么3.servlet 作用4. servlet 特性 前言 在当今时…...
多个pdf合并成一个pdf的方法
将多个PDF文件合并优点: 能更容易地对其进行归档和备份.打印时可以选择双面打印,减少纸张的浪费。比如把住宿发票以及滴滴发票、行程单等生成一个pdf,双面打印或者无纸化办公情况下直接发送给财务进行存档。 方法: 利用PDF24 Tools网站 …...
数据集笔记:新加坡停车费
data.gov.sg 该数据集包含 新加坡各停车场的停车费,具体信息包括: 停车场名称(Carpark):如 Toa Payoh Lorong 8、Ang Mo Kio Hub、Bras Basah Complex 等。停车区域类别(Category):…...
易错点abc
在同一个输入流上重复创建Scanner实例可能会导致一些问题,包括但不限于输入流的混乱。尤其是在处理标准输入(System.in)时,重复创建Scanner对象通常不是最佳实践,因为这可能导致某些输入数据丢失或者顺序出错。 为什么…...
leetcode第39题组合总和
原题出于leetcode第39题https://leetcode.cn/problems/combination-sum/description/题目如下: 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以…...
【iOS】小蓝书学习(七)
小蓝书学习(七) 前言第47条:熟悉系统框架第48条:多用枚举块,少用for循环第50条:构建缓存使选用NSCache而非NSDictionary第51条:精简initialize与load的实现代码第52条:别忘了NSTimer…...
基于第三方SDK的Windows平台全功能RTMP|RTSP直播播放器深度解析
一、引言 在当今数字化时代,直播技术的应用场景不断拓展,从娱乐直播到教育、医疗、工业等多个领域,都对直播播放器的功能和性能提出了更高的要求。本文将介绍一款基于第三方SDK实现的全功能直播播放器,从技术实现、功能特点、用户…...
命名实体识别与文本生成算法
在自然语言处理(NLP)的浩瀚星空中,命名实体识别(Named Entity Recognition, NER)与文本生成算法如同两颗璀璨的星辰,各自闪耀,又相互辉映,共同推动着人工智能技术在语言理解与生成领…...
题解 | 牛客周赛83 Java ABCDEF
目录 题目地址 做题情况 A 题 B 题 C 题 D 题 E 题 F 题 牛客竞赛主页 题目地址 牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ 做题情况 A 题 输出两个不是同一方位的字符中的任意一个就行 import java.io.*; import java.math.*; import java…...
样式和ui(待更新)
element-plus 先在项目下执行安装语句执行按需导入的命令按照官方文档修改vitest.json sass样式定制 npm -i sass -D在项目下准备定制的样式文件 styles/element/index.scss(!注意这里是.scss文件在vitest.json 修改配置文件 Components({resolvers: [ElementPlusResolver(…...
「Selenium+Python自动化从0到1②|2025浏览器操控7大核心API实战(附高效避坑模板))」
Python 自动化操作浏览器基础方法 在进行 Web 自动化测试时,操作浏览器是必不可少的环节。Python 结合 Selenium 提供了强大的浏览器操作功能,让我们能够轻松地控制浏览器执行各种任务。本文将详细介绍如何使用 Python 和 Selenium 操作浏览器的基本方法…...
C++的类和对象入门
目录 目录 目录 一、类 1.1类的定义 1.2访问限定符 1.3类域 1.4类的命名规范 1.5class和struct的默认访问权限 二、类的实例化 2.2对象的大小和存储 2.3空类的大小 三、this指针 3.1this指针的定义 3.2this指针的作用 3.2.1区分同名变量和局部变量 3.2.2返回对象…...
【清华大学】DeepSeek从入门到精通完整版pdf下载
DeepSeek从入门到精通.pdf 一共104页完整版 下载链接: https://pan.baidu.com/s/1-gnkTTD7EF2i_EKS5sx4vg?pwd1234 提取码: 1234 或 链接:https://pan.quark.cn/s/79118f5ab0fd 一、DeepSeek 概述 背景与定位 DeepSeek 的研发背景 核心功能与技术特点(…...
deepseek使用记录18——文化基因之文化融合
文明长河中的生命浪花 在洛阳白马寺的银杏树下,年轻母亲指着"农禅并重"碑刻给孩子讲述祖辈耕作的故事;在哔哩哔哩的直播间里,00后女孩穿着汉服跳起街舞,弹幕飘过"这才是文化缝合怪"。当文明交融的宏大叙事照…...
Java 大视界 -- Java 大数据在智慧文旅游客流量预测与景区运营优化中的应用(110)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
面试题:说一下你对DDD的了解?
面试题:说一下你对DDD的了解? 在面试中,关于 DDD(领域驱动设计,Domain-Driven Design) 的问题是一个常见的技术考察点。DDD 是一种软件设计方法论,旨在通过深入理解业务领域来构建复杂的软件系统。以下是一个清晰、详细的回答模板,帮助你在面试中脱颖而出: DDD 的定义…...
网络编程——UDP
UDP编程使用套接字(Socket)进行通信。下面是基于UDP协议进行网络编程的基本步骤。 1. 创建套接字 首先,客户端和服务器都需要通过 socket() 系统调用创建一个UDP套接字。 2. 配置地址和端口 UDP是无连接的,因此你不需要像TCP一…...
【网络安全 | 渗透测试】GraphQL精讲二:发现API漏洞
未经许可,不得转载。 推荐阅读:【网络安全 | 渗透测试】GraphQL精讲一:基础知识 文章目录 GraphQL API 漏洞寻找 GraphQL 端点通用查询常见的端点名称请求方法初步测试利用未清理的参数发现模式信息使用 introspection探测 introspection运行完整的 introspection 查询可视化…...
代码随想录Day23 | 39.组合总和、40.组合总和II、131.分割回文串
39.组合总和 自己写的代码: class Solution { public:vector<int> path;vector<vector<int>> res;int sum0;void backtracking(vector<int>& candidates,int target,int startIndex){if(sum>target) return;if(sumtarget){res.pus…...
MyBatis 新手入门教程:基础操作篇
MyBatis 新手入门教程:基础操作篇 适合人群:无 MyBatis 使用经验者 (完整版3.3准时发,此篇为新手入门的基础操作) 一、MyBatis 是什么? 简单理解: MyBatis 是一个帮你操作数据库的工具&#x…...
zjbdt
嵌入式软件工程师可以通过考取相关职业证书来提升专业能力和职业竞争力。以下是几种含金量较高且广受认可的证书: 1. NIEH 嵌入式技术工程师证书 颁发机构:教育部考试中心级别:初级、中级、高级内容:涵盖嵌入式系统的基础理论、开…...
行为型模式 - 中介者模式 (Mediator Pattern)
行为型模式 - 中介者模式 (Mediator Pattern) 中介者模式的核心思想是将对象之间的复杂交互封装到一个中介者对象中,从而降低对象之间的耦合度。 import java.util.ArrayList; import java.util.List;// 抽象中介者类 abstract class TowerMediator {public abstra…...
如何使用C#与SQL Server数据库进行交互
一.创建数据库 用VS 创建数据库的步骤: 1.打开vs,创建一个新项目,分别在搜素框中选择C#、Windows、桌面,然后选择Windows窗体应用(.NET Framework) 2.打开“视图-服务器资源管理器”,右键单击“数据连接”࿰…...
同步类型对比
同步类型对比 特性准同步 (Quasi-Synchronization)完全同步 (Complete Synchronization)渐进同步 (Asymptotic Synchronization)定义系统状态在有限时间内接近同步,但存在微小误差。系统状态在有限时间内完全一致。系统状态随时间趋近于同步,但可能需要…...
python爬虫Scapy框架(1)
简介 什么是框架? 所谓的框,其实说白了就是一个【项目的半成品】,该项目的半成品需要被集成了各种功能且具有较强的通用性。 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非…...
java容器 LIst、set、Map
Java容器中的List、Set、Map是核心数据结构,各自适用于不同的场景 一、List(有序、可重复) List接口代表有序集合,允许元素重复和通过索引访问,主要实现类包括: ArrayList 底层结构:动态数组…...
2W8000字 LLM架构文章阅读指北
❝ 大模型架构专栏已经更新了30多篇文章。完整的专栏内容欢迎订阅: LLM 架构专栏 1、LLM大模型架构专栏|| 从NLP基础谈起 2、 LLM大模型架构专栏|| 自然语言处理(NLP)之建模 3、 LLM大模型架构之词嵌入(Part1) 3、 LLM…...