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)