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

在Python中,数据的持久化通常指的是将内存中的数据(如变量、列表、字典等)保存到硬盘上,以便在程序退出或重新启动后仍然可以访问这些数据。Python提供了多种实现数据持久化的模块,其中包括marshal和shelve。

一、marshal模块

marshal模块提供了一种将Python对象转换为字节序列(二进制字符串)的方式,以便可以将其保存到文件中。同时,它也可以将字节序列转换回Python对象。这个模块在处理简单的数据结构(如数字、字符串、列表和字典)时方便。

#1 将字典保存到文件中
import marshal  
# 创建一个字典  
data = {'name': '张三', 'age': 30, 'city': '西安'}  
# 将字典写入文件  
with open('data.marshal', 'wb') as f:  marshal.dump(data, f)#2 从文件中读取字典到程序中
# 从文件读取数据  
with open('data.marshal', 'rb') as f:  loaded_data = marshal.load(f)  
# 输出数据  
print(loaded_data)  
# 输出: {'name': '张三', 'age': 30, 'city': '西安'}  

注意:marshal模块不支持跨平台的数据交换,因为它依赖于Python的内部表示。此外,由于它生成的是二进制数据,所以可读性也很差。

二、shelve模块

shelve模块提供了一个简单的持久化字典接口,使得Python对象可以像字典一样被保存到文件中,也可以从文件中读取到程序中。与marshal不同,shelve模块支持更复杂的Python对象,如自定义类的实例。

#1 将对象保存到文件中
import shelve  
# 创建一个字典  
data = {'name': '李四', 'age': 25, 'city': '上海'}  
# 创建一个shelve数据库  
with shelve.open('data.shelve') as db:  db['person'] = data
#2 从文件中读取对象到程序中
# 打开shelve数据库  
with shelve.open('data.shelve') as db:  loaded_data = db['person']  
# 输出数据  
print(loaded_data)  
# 输出: {'name': '李四', 'age': 25, 'city': '上海'}  

注意事项:
虽然shelve模块非常方便,但它使用pickle来序列化对象,这可能会带来一些安全风险,因为pickle可以执行任意代码。因此,在处理不受信任的数据时,应该避免使用shelve模块。
当不再需要访问shelve数据库时,应该显式地关闭它(使用with语句可以自动关闭)。否则,可能会导致数据损坏或丢失。

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

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

相关文章

深度学习基础之《TensorFlow框架(17)—卷积神经网络》

一、卷积神经网络介绍 1、背景 随着人工智能需求的提升,我们想要做复杂的图像识别,做自然语言处理,做语义分析翻译等等,多层神经网络的简单叠加显然力不从心 2、卷积神经网络与传统多层神经网络对比 (1)传…

MotionDiffuse: Text-Driven Human Motion Generation withDiffusion Model # 论文阅读

URL https://arxiv.org/pdf/2208.15001 主页:https://mingyuan-zhang.github.io/projects/MotionDiffuse.html TD;DR 22 年 8 月商汤的文章,引用量 200。基于 SD,任务是输入文本的动作描述,生成对应的动作序列。 已有的 moti…

windows 10安装 docker desktop

升级 windows 10 windows 10 升级到 20H2,如 20H2 19045.4291。 注意:需返回更新,重启计算机,确保更新完整。 bios 开启虚拟化 开启cpu虚拟化功能。 windows 启用功能 启用hyper-v 启用 wsl 安装 wsl https://learn.microso…

C语言typedef 与 #define 宏的相似之处与不同之处是什么?

一、问题 typedef 关键字的功能就是给⼀个已经存在的数据类型起⼀个在本程序中能够体现实际作⽤的名字。#define 宏定义是为⼀个字符串起⼀个别名,在程序中应⽤到该字符串时, ⽤这个别名来替代。那么 typedef 与 #define 的相似之处是什么,不…

【环境配置】vsCode 中使用 conda 配置虚拟环境

文章目录 准备前言在 vsCode 中直接创建创建步骤测试更新环境 使用 Anaconda 建立虚拟环境创建步骤在 vsCode 中选择环境 总结 准备 在看本博客之前,希望大家有以下知识储备: 能够正确安装 vsCode,并配置好 python 环境;了解并安…

初认识鸿蒙

初认识鸿蒙 相关鸿蒙的华为网站华为开发者官方网站初学者模块:社区--鸿蒙--论坛模块:学堂--鸿蒙--学习路径模块:Codelabs--鸿蒙有经验者产品页黄大年茶思屋其他页面HarmonyOS Developer初学者模块:文档模块:开发--HarmonyOS模块:开发--HMS Core模块:开发--AppGallery Co…

Backup

目录 1、 Backup 1.1、 SQLException 1.2、 printInfo 1.3、 getSQLValue Backup package com.my.blog.website.utils.backup;

一觉醒来 AI科技圈发生的大小事儿 05月09日

📳AlphaFold 3 重磅问世,全面预测蛋白质与所有生命分子相互作用及结构,准确性远超以往水平 Google DeepMind发布了AlphaFold3模型,能够联合预测蛋白质、核酸、小分子等复合物结构,准确性显著提高,对跨生物…

安服仔养成篇——等级保护

最近刚好对等保的一些知识有疑问,查了资料解答后刚好又能写一期,这期就用问答的方式来写吧,刚刚好给和我一样蒙蔽的师傅们走进等保。 ①等级保护针对哪些单位? 答: 政府机关:各大部委、各省级政府机关、各…

Flask SQLAlchemy 技术指南

文章目录 什么是 Flask SQLAlchemy?安装 Flask SQLAlchemy创建 Flask 应用和数据库模型添加和查询数据运行 Flask 应用总结**数据库迁移(Database Migrations)****复杂查询****关系模型****事务处理****性能优化****安全性****扩展功能** Fla…

深化产教融合,泰迪智能科技助力西南林业大学提质培优

2024年5月7日,泰迪智能科技昆明分公司院校部总监查良红和数据部负责人余雄亮赴西南林业大学理学院就工作室共建事宜进行交流会谈。西南林业大学理学院院长张雁、党委副书记魏轶、副院长谢爽、就业负责人罗丽及学生代表参与本次交流会。 会议伊始,谢副院长…

邮件大附件系统如何进行安全、高效的大附件发送?

邮件大附件系统是一套解决传统电子邮件系统,在发送大文件时遇到限制的解决方案。由于传统电子邮件系统通常对附件大小有限制,这使得发送大文件变得困难。邮件大附件系统通过各种技术手段,允许用户发送超过传统限制的大文件,通常在…

Java面试常见问题

操作系统 1.Q: 在操作系统中,什么时候会发生用户态到内核态的切换 A: 操作系统中,用户态和内核态是两种不同的权限级别,他们对应着不同的执行环境和执行权限。用户态事指程序在一般的运行情况下的的级别,它具有别较低的权限级别&…

Civitai 转 diffusers 的 base model

Civitai 转 diffusers 的 base model Q1 Q1 pipe StableDiffusionControlNetImg2ImgPipeline.from_pretrained(# "runwayml/stable-diffusion-v1-5", "/data/model/basemodel/realistic_v10BAKEDVAE.safetensors",controlnetcontrolnet, torch_dtypetorc…

华为ICT学院教师指南(HCAI认证)结课测试

华为基于“平台+生态”战略,坚持联合教育培训机构、行业协会及合作伙伴等各类资源,共同构筑ICT人才生态良性发展的使能平台,这其中华为的角色有哪些? 0 人才标准的制定者 1 人才联盟的建设者 2 人才价值的传播者 3 以上全部 下列哪些技术方向属于华为授权课程? 0 网络…

[Spring框架] 手写Spring

目录 一、背景 二、简易版Spring代码 三、使用自定义Spring代码 四、总结 一、背景 作为一个后端程序员,Spring框架是在开发中必不可少的,相信很多人都学过Spring的底层原理并且看过很多源码。但是对我来说,实操是一个会加深对代码的理解…

07-面向对象编程(基础部分)

学习java最核心最重要的就是要理解面向对象。 1. 类与对象 1.1 介绍 类是抽象的,概念的,代表一类事物,比如人类,猫类,狗类.., 即它是数据类型。 对象是具体的,实际的,代表一个具体事物,&…

Leetcode227. 基本计算器 II

Every day a Leetcode 题目来源&#xff1a;227. 基本计算器 II 解法1&#xff1a;单栈模拟 因为没有括号&#xff0c;所以可以简化成单栈。 代码&#xff1a; class Solution { public:int calculate(string s){vector<int> nums;char preSign ;int num 0;int n …

可以修改linux 文件的所有者吗

是的&#xff0c;你可以修改Linux文件的所有者。这通常是通过chown&#xff08;change owner&#xff09;命令来完成的。以下是使用chown命令的一些示例&#xff1a; 更改文件的所有者&#xff1a; chown new_owner file.txt这条命令会将file.txt的所有者更改为new_owner。 同…

如果数据给的是树形 转好的树形结构并且是有两个二级children的话 该如何写?

第一我们要自己写一个children 并且张数据里面的所要渲染的二级进行赋值 赋给我们新建的children 以下是代码转树形赋值 organ().then(function (res) {console.log(res); // 成功回调// setLists(res.data.data)res.data.data res.data.data.map((obj) > ({...obj, // …