Python_4-对象序列化操作

文章目录

  • Python中对象数据持久化操作模块学习笔记
    • marshal模块
      • 优点
      • 缺点
      • 使用示例
        • 保存数据到文件
        • 从文件读取数据
    • shelve模块
      • 优点
      • 缺点
      • 使用示例
        • 保存数据到文件
        • 从文件读取数据
    • 总结

Python中对象数据持久化操作模块学习笔记

在Python中,数据持久化指的是将程序中的数据结构转换为可以存储的形式,并在需要的时候重新加载到程序中。以下是两个常用于数据持久化的模块:marshalshelve
在这里插入图片描述

marshal模块

marshal模块是Python的一个内置模块,它可以用来将Python对象序列化为字节流,以及将这些字节流反序列化回Python对象。这个模块主要用于Python对象的序列化,它支持大多数Python数据类型。

优点

  • 速度快,因为marshal模块是C语言编写的,所以序列化和反序列化的速度非常快。
  • 兼容性好,可以序列化几乎所有Python标准数据类型。

缺点

  • 安全性低,因为marshal模块不进行任何数据的安全性检查,所以它可能会执行任意代码。
  • 不支持自定义对象。

使用示例

保存数据到文件
import marshal# 字典数据
data = {'key1': 'value1', 'key2': 'value2'}# 将数据序列化并保存到文件
with open('data.marshal', 'wb') as f:marshal.dump(data, f)
从文件读取数据
import marshal# 从文件反序列化数据
with open('data.marshal', 'rb') as f:data = marshal.load(f)
print(data)

shelve模块

shelve模块提供了一个简单的接口来保存和读取Python对象。它使用一个字典类型的对象作为界面,所有字典中的操作都会被保存到磁盘上。

优点

  • 易于使用,它提供了一个非常直观的字典接口。
  • 支持自定义对象。

缺点

  • 速度慢,相比marshalshelve的速度较慢。
  • 兼容性一般,它依赖于dbm模块,不同的dbm实现可能会影响数据的兼容性。

使用示例

保存数据到文件
import shelve# 创建一个shelve对象,指定数据库名称
with shelve.open('data.db') as db:db['key1'] = 'value1'db['key2'] = 'value2'
从文件读取数据
import shelve# 打开shelve对象并读取数据
with shelve.open('data.db') as db:print(db['key1'])print(db['key2'])

总结

  • marshal模块适合于快速序列化和反序列化Python内置数据类型,但安全性较低,不支持自定义对象。
  • shelve模块提供了一个简单易用的字典接口,支持自定义对象,但速度较慢,且依赖于dbm模块。

在实际应用中,选择哪个模块取决于具体的需求和场景。如果数据安全性和自定义对象支持是关键因素,shelve可能是更好的选择。如果速度和性能是主要考虑,marshal可能更适合。不过,对于更复杂的数据持久化需求,可能需要考虑其他更专业的数据库解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/671477.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 性能优化之遮挡剔除(Occlusion Culling)(六)

提示:仅供参考,有误之处,麻烦大佬指出,不胜感激! 文章目录 前言一、遮挡剔除是什么?二、静态遮挡剔除的使用步骤1.标记为遮挡剔除对象2.创建Occlusion Area组件3.烘焙4.Occlusion窗口Bake的参数Smallest Oc…

快速入门!学习鸿蒙App开发的终极指南!

鸿蒙(HarmonyOS)是华为推出的一款分布式操作系统,旨在为不同设备提供统一的操作体验。鸿蒙App开发可以让应用程序在多个设备上实现流畅运行。本文将介绍鸿蒙App开发的终极指南,帮助您快速入门。 开发环境搭建 鸿蒙App开发过程需要…

Linux PXE高效批量网络装机

系统初始化 systemctl disable --now firewalld.service setenforce 0 vim /etc/selinux/config 安装软件 yum install -y tftp-server xinetd dhcp vsftpd syslinux 复制 vmlinuz initrd.img pxelinux.0 到 /var/lib/tftpboot/ 目录 [rootlocalhost ~]# cd /mnt/…

遥遥领先们赚钱的路子,被香飘飘找到了……?

刚刚结束了的五一长假,中文互联网上可以说满是各种对立、冲突。 让人惋惜的胖猫及遭万人唾弃的捞女谭竹之外,曾经卖奶茶杯子绕地球几圈,如今却被多数人遗忘的香飘飘,一通操作下来,让不少吃瓜群众小刀剌屁股开了眼了……

nacos开启登录开关启动报错“Unable to start embedded Tomcat”

nacos 版本:2.3.2 2.2.2版本之前的Nacos默认控制台,无论服务端是否开启鉴权,都会存在一个登录页;在之后的版本关闭了默认登录页面,无需登录直接进入控制台操作。在这里我们可以在官网可以看到相关介绍 而我现在所用的…

Docker网络基础

简介 Docker 本身的技术依赖于近年来 Linux 内核虚拟化技术的发展,Docker 对 Linux 内核的特性有很强的依赖。Docker 使用到的与 Linux 网络有关的主要技术有:网络命名空间、veth 设备对、网桥、ipatables 、路由。 网络命名空间 为了支持网络协议栈的多个实例,Linux在网络栈…

jmeter下载及安装配置

前言 本文是在win10环境下安装使用jmeter,jmeter可以运行在多平台上Windows和Linux。 环境准备:java 1.8jmeter 5.1.1 jmeter环境 jmeter环境依赖JAVA环境,需安装JDK1.8环境,JDK环境安装网上一大堆教程,我这里就不…

如何让你的排单更快?

一般我们都喜欢做打板借用快速通道!但是目前快速通道也是共享通道,独立单元格基本不开发。 想要排单更快,想要隔夜打板,我们到底应该怎么做呢? 想要排单更快,说白了就是要提高你的交易速度!一&a…

解决python/pycharm中import导入模块时报红却能运行的问题

一、问题 导入时报红,如下 二、解决 右键单击项目,将项目Mark Directory as→Sources Root 三、效果 报红消失 学习导航:http://www.xqnav.top

虚拟化之---virtio通信

一、理解virtio的背景 我们知道虚拟化hypervisor大的类型分为两种,全虚拟化和半虚拟化。 在全虚拟化的解决方案中,guest VM 要使用底层 host 资源,需要 Hypervisor 来截获所有的请求指令,然后模拟出这些指令的行为,这样…

服务器遭受攻击后的黑洞状态应对策略及防护机制解析

引言 在网络安全领域中,当服务器遭受大规模DDoS攻击或其他恶意流量冲击时,为了保护服务的稳定性和其他正常用户的使用体验,往往会采取一种紧急防护手段——将服务器置于黑洞状态。所谓黑洞状态,即网络服务商暂时屏蔽掉对服务器的…

C语言-设置控制台信息

Win_API Win_API是Windows应用程序接口(Windows Application Programming Interface)的缩写,它是一组函数、系统服务和程序接口,允许开发者在微软Windows操作系统上创建应用程序。Win32 API 是Windows API的一个主要部分&#xff…