
21 python基础--文件持久化
发布日期:2021-05-14 12:22:36
浏览次数:18
分类:精选文章
本文共 1737 字,大约阅读时间需要 5 分钟。
持久化 - pickle
序列化(持久化,落地):将程序运行中的信息保存在磁盘上。反序列化则是序列化的逆过程。Pickle是Python提供的序列化模块,常用于将程序中的数据持久化。Pickle.dump用于序列化,Pickle.load用于反序列化。
**序列化案例1**: `age = 19` 使用以下代码可以将age序列化并保存到test01.txt文件中。需要注意的是,如果文件不存在,Pickle会自动创建它。 import pickle with open(r'test01.txt', 'wb') as f: pickle.dump(age, f) 反序列化时,可以通过以下代码从文件中读取age的值: with open(r'test01.txt', 'rb') as f: age = pickle.load(f) print(age) 序列化案例2: 文件中保存的数据可以是任意数据类型,如列表、元组、对象等。以下案例展示了如何将一个包含多个数据类型的列表序列化并保存到文件中: a = [19, 'liudana', "i love wangxiaojing", [185, 76]] with open(r'test01.txt', 'wb') as f: pickle.dump(a, f) 反序列化时,可以通过以下代码从文件中读取数据: with open(r'test01.txt', 'rb') as f: s = pickle.load(f) print(s) 持久化 - shelve Shelve是一种类似字典的持久化工具,用于以键值对的形式存储数据。它的使用方式与字典相似,支持通过.open()和.close()方法来打开和关闭文件。通过Shelve,可以方便地管理和存取数据。 以下案例展示了如何使用Shelve进行简单的数据持久化。首先,我们创建一个名为sh.db的文件,并将键值对存储其中: import shelve # 打开或创建文件 shv = shelve.open(r'C:\Users\Administrator\Desktop\sh.db') # 存储数据 shv['one'] = 1 shv['two'] = 2 shv['three'] = 3 shv.close() 读取数据时,可以通过以下代码从文件中获取所存储的键值对: shv = shelve.open(r'C:\Users\Administrator\Desktop\sh.db') try: print(shv['one']) print(shv['threee']) except Exception as e: print("异常发生:%s" % e) finally: shv.close() Shelve有以下特性需要注意: 1. 不支持多个应用同时并行写入。 2. 为了避免该问题,可以在打开文件时设置flag=r的标志位。 3. Shelve文件不会实时同步到磁盘,建议使用writeback=True参数来强制写回数据。 以下案例展示了如何使用writeback=True来确保数据持久化。 # 打开文件并启用writeback shv = shelve.open(r'shv.db', writeback=True) try: k1 = shv['one'] print(k1) # 如果此时shelve关闭,数据会被写回数据库 k1['eins'] = 100 finally: shv.close() # 重新打开文件读取数据 shv = shelve.open(r'shv.db') try: k1 = shv['one'] print(k1) finally: shv.close()
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月17日 19时37分24秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
c++之程序流程控制
2019-03-06
spring-boot-2.0.3之redis缓存实现,不是你想的那样哦!
2019-03-06
httprunner学习23-加解密
2019-03-06
有道云笔记 同步到我的博客园
2019-03-06
李笑来必读书籍整理
2019-03-06
http头部 Expect
2019-03-06
Hadoop(十六)之使用Combiner优化MapReduce
2019-03-06
《机器学习Python实现_10_06_集成学习_boosting_gbdt分类实现》
2019-03-06
CoreCLR源码探索(八) JIT的工作原理(详解篇)
2019-03-06
IOS开发Swift笔记16-错误处理
2019-03-07
flume使用中的一些常见错误解决办法 (地址已经使用)
2019-03-07
andriod 开发错误记录
2019-03-07
C语言编译错误列表
2019-03-07
看明白这两种情况,才敢说自己懂跨链! | 喵懂区块链24期
2019-03-07
张一鸣:创业7年,我经历的5件事
2019-03-07
《web安全入门》(四)前端开发基础Javascript
2019-03-07
python中列表 元组 字典 集合的区别
2019-03-07