当前位置: 首页 > news >正文

如何使用python保存字典

在Python中,可以通过多种方式将字典(dict)保存到文件中,并能够随时读取恢复。以下是几种常见的方法:


1. 使用 json 模块(推荐)
适用场景:需要人类可读的文件格式,且数据不包含Python特有对象(如自定义类)。

import json# 保存dict到文件
data = {"name": "Alice", "age": 25, "skills": ["Python", "Java"]}
with open("data.json", "w", encoding="utf-8") as f:json.dump(data, f, indent=4)  # indent参数使文件更易读# 从文件读取dict
with open("data.json", "r", encoding="utf-8") as f:loaded_data = json.load(f)print(loaded_data)  # 输出: {'name': 'Alice', 'age': 25, 'skills': ['Python', 'Java']}

优点:
• 文件为纯文本,可手动编辑。

• 跨语言兼容(几乎所有语言都支持JSON)。

缺点:
• 无法直接保存Python特有对象(如datetime或自定义类)。


2. 使用 pickle 模块
适用场景:需要保存Python特有对象或复杂数据结构。

import pickle# 保存dict到文件
data = {"key": "value", "nested": {"a": 1, "b": 2}}
with open("data.pkl", "wb") as f:pickle.dump(data, f)# 从文件读取dict
with open("data.pkl", "rb") as f:loaded_data = pickle.load(f)print(loaded_data)  # 输出原字典

优点:
• 支持几乎所有Python对象。

• 文件为二进制格式,不易被篡改。

缺点:
• 文件不可读,且可能存在安全风险(反序列化恶意数据)。

• 仅限Python使用。


3. 使用 yaml 模块(需安装 pyyaml
适用场景:需要更人性化的配置文件格式。

import yaml  # 需安装: pip install pyyaml# 保存dict到文件
data = {"name": "Bob", "languages": ["Python", "C++"]}
with open("data.yaml", "w", encoding="utf-8") as f:yaml.safe_dump(data, f)# 从文件读取dict
with open("data.yaml", "r", encoding="utf-8") as f:loaded_data = yaml.safe_load(f)print(loaded_data)

优点:
• 文件可读性极强,支持注释。

• 适合配置文件。

缺点:
• 需要安装第三方库(pyyaml)。

• 性能不如JSON或pickle。


4. 使用 shelve 模块
适用场景:需要类似字典的持久化存储,支持动态读写。

import shelve# 保存dict到文件
with shelve.open("shelve_data") as db:db["user"] = {"id": 1, "name": "Charlie"}# 从文件读取dict
with shelve.open("shelve_data") as db:loaded_data = db["user"]print(loaded_data)  # 输出: {'id': 1, 'name': 'Charlie'}

优点:
• 像操作字典一样读写数据。

• 支持动态增删键值。

缺点:
• 文件为数据库格式,不可直接编辑。

• 跨平台兼容性可能受限。


5. 使用 csv 模块(仅限简单字典)
适用场景:字典结构简单(扁平化键值对),需与表格软件兼容。

import csv# 保存dict到文件
data = {"name": "David", "age": 30}
with open("data.csv", "w", encoding="utf-8") as f:writer = csv.writer(f)writer.writerow(data.keys())   # 写入表头writer.writerow(data.values()) # 写入值# 读取csv为dict
with open("data.csv", "r", encoding="utf-8") as f:reader = csv.reader(f)headers = next(reader)values = next(reader)loaded_data = dict(zip(headers, values))print(loaded_data)  # 输出: {'name': 'David', 'age': '30'}

缺点:
• 仅适合单层字典,嵌套结构需额外处理。


总结建议
• 通用性/可读性:用 json(首选)。

• Python特有对象:用 pickle

• 配置文件:用 yaml

• 动态键值存储:用 shelve

• 表格兼容:用 csv

在这里插入图片描述

相关文章:

  • 【Java idea配置】
  • 深入了解Linux系统—— 环境变量
  • 8.2 GitHub企业级PDF报告生成实战:ReportLab高级技巧与性能优化全解析
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】2.4 正则表达式与文本处理(LIKE/REGEXP_MATCHES)
  • 【机器学习案列-22】基于线性回归(LR)的手机发布价格预测
  • 【操作系统】死锁
  • 理解MAC-IP映射、ARP协议与ARP欺骗及防护
  • PCIe TLP | 报头 / 包格式 / 地址转换 / 寄存器 / 配置空间类型
  • Java变量学习笔记
  • 重新构想E-E-A-T:提升销售与搜索可见性的SEO策略
  • SQL语句--postgis语句(矢量数据的定义与操作)
  • 生成式 AI 的工作原理
  • 数学实验(Matlab语言环境和线性代数实验)
  • PyTorch_张量转换为numpy数组
  • 用可视化学习逆置法
  • 基于LangChain 实现 Advanced RAG-后检索优化(上)-Reranker
  • 如何提升个人的思维能力?
  • 人工智能:如何快速筛选出excel中某列存在跳号的单元格位置?
  • C++ 中的继承
  • scikit-learn在监督学习算法的应用
  • 最长3个月免费住宿,南昌人才驿站(洪漂驿站)申请指南发布
  • 贵州游船侧翻248名消防员已在搜救
  • 日本政府强烈反对美关税政策并要求其取消
  • 猎金,游戏,诚不我欺
  • 艺术开卷|韩羽读齐白石:妙在似与不似之间
  • 首日5金!中国队夺得跳水世界杯总决赛混合团体冠军