一日一技:在 Python 中像字典一样持久化数据
2021-03-12 19:28
标签:线程 library image mic 简单的 它的 对象 json 直接 摄影:产品经理 但这样做有一个弊端,就是在读取数据的时候,我们把整个数据读入内存以后,还需要单独写一段代码,用来区分哪里是username对应的值,哪些是password对应的值。 实际上,在 Python 中,我们可以使用shelve模块,像读写字典一样持久化存储数据。例如,在 write.py文件中,我们写如下代码: 运行完成以后,会在write.py所在的文件夹下面生成一个data.db文件,如下图所示: 现在,我们再写一个read.py,其内容如下: 并且,原来写文本文件的时候,如果我们的数据是字典或者列表,直接写入还会报错,必需先转成 JSON 字符串才能写入。 但shelve模块没有这个限制,所有能被 pickle的对象,都可以存入,例如: 需要注意的是,shelve模块底层基于pickle模块,所以当别人传给你一个 shelve生成的文件时,不能贸然打开,否则可能会执行危险的代码。 另外,shelve模块只支持多线程同时读取。不支持多线程写入,也不支持同时读写。 关于shelve的更多参数,可以参阅它的官方文档[1]. 参考资料 [1] 一日一技:在 Python 中像字典一样持久化数据 标签:线程 library image mic 简单的 它的 对象 json 直接 原文地址:https://blog.51cto.com/15023263/2558914
买单:kingname
我们知道,如果我们在 Python 中想把一段数据持久化到硬盘上,最简单的办法就是写文件:
with open(‘data.txt‘, ‘w‘, encoding=‘utf-8‘) as f:
f.write(‘username:1234567\n‘)
f.write(‘password: 9876543\n‘)
import shelve
with shelve.open(‘data‘) as db:
db[‘username‘] = 12345678
db[‘password‘] = 98765432
import shelve
with shelve.open(‘data‘) as db:
username = db[‘username‘]
password = db[‘password‘]
print(f‘账号为:{username}‘)
print(f‘密码为:{password}‘)
不需要我们单独做额外的解析,就能像读取字典一样读取持久化到硬盘中的数据。
import shelve
with shelve.open(‘data‘) as db:
db[‘complex_data‘] = [{‘a‘: 1, ‘b‘: [1, 2, 3]}, 2, ‘a‘]
官方文档: https://docs.python.org/3.8/library/shelve.html
文章标题:一日一技:在 Python 中像字典一样持久化数据
文章链接:http://soscw.com/index.php/essay/63788.html