023. 将一个字典序列化到一个文件中
在 Python 中,可以使用 json
模块将字典序列化为 JSON 格式,并将其保存到文件中。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,非常适合用于存储和传输数据。
示例代码
import json
# 定义一个字典
data = {
"name": "Alice",
"age": 30,
"city": "New York",
"is_student": False,
"hobbies": ["reading", "traveling", "coding"]
}
# 指定文件路径
file_path = "data.json"
# 将字典序列化到文件中
try:
with open(file_path, "w", encoding="utf-8") as file:
# 使用 json.dump() 将字典序列化为 JSON 格式并写入文件
json.dump(data, file, ensure_ascii=False, indent=4)
print(f"字典已成功序列化到文件 {file_path} 中。")
except Exception as e:
print(f"发生了一个错误:{e}")
运行结果
运行上述代码后,会在当前目录下生成一个名为 data.json
的文件,文件内容如下:
{
"name": "Alice",
"age": 30,
"city": "New York",
"is_student": false,
"hobbies": [
"reading",
"traveling",
"coding"
]
}
代码解释
导入 json
模块:
- 使用
import json
导入 Python 的json
模块,该模块提供了序列化和反序列化 JSON 数据的功能。
定义字典:
- 定义一个字典
data
,包含一些键值对。
指定文件路径:
- 定义文件路径
file_path
,指定要保存的文件名。
序列化字典到文件:
-
使用
with open(file_path, "w", encoding="utf-8") as file
打开文件,以写入模式("w"
)打开文件。 -
使用
json.dump(data, file, ensure_ascii=False, indent=4)
将字典序列化为 JSON 格式并写入文件。 -
ensure_ascii=False
:允许在 JSON 文件中使用非 ASCII 字符(如中文)。 -
indent=4
:设置缩进为 4 个空格,使生成的 JSON 文件更易读。
异常处理:
- 使用
try-except
块捕获可能发生的异常,例如文件写入错误。
扩展:从文件中反序列化字典
如果需要从文件中读取 JSON 数据并将其反序列化为字典,可以使用 json.load()
方法。以下是一个示例:
import json
# 指定文件路径
file_path = "data.json"
try:
with open(file_path, "r", encoding="utf-8") as file:
# 使用 json.load() 从文件中读取 JSON 数据并反序列化为字典
data = json.load(file)
print("从文件中反序列化的字典:")
print(data)
except FileNotFoundError:
print(f"错误:文件 {file_path} 未找到!")
except json.JSONDecodeError:
print("错误:文件内容不是有效的 JSON 格式!")
except Exception as e:
print(f"发生了一个错误:{e}")
运行结果
假设文件 data.json
的内容如下:
{
"name": "Alice",
"age": 30,
"city": "New York",
"is_student": false,
"hobbies": [
"reading",
"traveling",
"coding"
]
}
运行上述代码后,输出如下:
从文件中反序列化的字典:
{'name': 'Alice', 'age': 30, 'city': 'New York', 'is_student': False, 'hobbies': ['reading', 'traveling', 'coding']}
注意事项
文件路径:
- 确保文件路径正确。如果文件和脚本在同一目录下,可以直接使用文件名;否则需要提供相对路径或绝对路径。
文件编码:
- 在写入和读取文件时,建议指定文件编码(如
encoding="utf-8"
),以避免编码问题。
异常处理:
- 使用
try-except
块捕获可能发生的异常,例如文件未找到、文件内容不是有效的 JSON 格式等。
视频讲解
BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)