一日一技:在 Python 中像字典一样持久化数据

简介: 一日一技:在 Python 中像字典一样持久化数据

摄影:产品经理买单:kingname

我们知道,如果我们在 Python 中想把一段数据持久化到硬盘上,最简单的办法就是写文件:

with open('data.txt', 'w', encoding='utf-8') as f:
    f.write('username:1234567\n')
    f.write('password: 9876543\n')

但这样做有一个弊端,就是在读取数据的时候,我们把整个数据读入内存以后,还需要单独写一段代码,用来区分哪里是username对应的值,哪些是password对应的值。

实际上,在 Python 中,我们可以使用shelve模块,像读写字典一样持久化存储数据。例如,在 write.py文件中,我们写如下代码:

import shelve
with shelve.open('data') as db:
    db['username'] = 12345678
    db['password'] = 98765432

运行完成以后,会在write.py所在的文件夹下面生成一个data.db文件,如下图所示:

现在,我们再写一个read.py,其内容如下:

import shelve
with shelve.open('data') as db:
    username = db['username']
    password = db['password']
print(f'账号为:{username}')
print(f'密码为:{password}')

不需要我们单独做额外的解析,就能像读取字典一样读取持久化到硬盘中的数据。

并且,原来写文本文件的时候,如果我们的数据是字典或者列表,直接写入还会报错,必需先转成 JSON 字符串才能写入。

shelve模块没有这个限制,所有能被 pickle的对象,都可以存入,例如:

import shelve
with shelve.open('data') as db:
    db['complex_data'] = [{'a': 1, 'b': [1, 2, 3]}, 2, 'a']

需要注意的是,shelve模块底层基于pickle模块,所以当别人传给你一个 shelve生成的文件时,不能贸然打开,否则可能会执行危险的代码。

另外,shelve模块只支持多线程同时读取。不支持多线程写入,也不支持同时读写。

关于shelve的更多参数,可以参阅它的官方文档[1].

目录
相关文章
|
1月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
106 10
|
3天前
|
JSON 监控 安全
深入理解 Python 的 eval() 函数与空全局字典 {}
`eval()` 函数在 Python 中能将字符串解析为代码并执行,但伴随安全风险,尤其在处理不受信任的输入时。传递空全局字典 {} 可限制其访问内置对象,但仍存隐患。建议通过限制函数和变量、使用沙箱环境、避免复杂表达式、验证输入等提高安全性。更推荐使用 `ast.literal_eval()`、自定义解析器或 JSON 解析等替代方案,以确保代码安全性和可靠性。
17 2
|
10天前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
1月前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
2月前
|
XML JSON API
如何使用Python将字典转换为XML
本文介绍了如何使用Python中的`xml.etree.ElementTree`库将字典数据结构转换为XML格式。通过定义递归函数处理字典到XML元素的转换,生成符合标准的XML文档,适用于与旧系统交互或需支持复杂文档结构的场景。示例代码展示了将一个简单字典转换为XML的具体实现过程。
20 1
|
2月前
|
传感器 物联网 开发者
使用Python读取串行设备的温度数据
本文介绍了如何使用Python通过串行接口(如UART、RS-232或RS-485)读取温度传感器的数据。详细步骤包括硬件连接、安装`pyserial`库、配置串行端口、发送请求及解析响应等。适合嵌入式系统和物联网应用开发者参考。
64 3
|
3月前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
2月前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
38 1
|
3月前
|
数据处理 Python
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这篇文章介绍了如何使用Python读取Excel文件中的数据,处理后将其保存为txt、xlsx和csv格式的文件。
155 3
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
|
3月前
|
计算机视觉 Python
Python实用记录(九):将不同的图绘制在一起、将不同txt文档中的数据绘制多条折线图
这篇文章介绍了如何使用Python的OpenCV库将多张图片合并为一张图片显示,以及如何使用matplotlib库从不同txt文档中读取数据并绘制多条折线图。
56 3
Python实用记录(九):将不同的图绘制在一起、将不同txt文档中的数据绘制多条折线图