Dict Json vs Pickle

2025-03-18

难度: 2

时长: 30 min

在 Python 里,你能够借助 jsonpickle 模块把 dict 数据保存到文件里,之后再读取出来。下面为你呈现详细的入门教程。

1. 使用 json 模块保存和读取 dict 数据

json 模块可用于处理 JSON 数据,JSON 是一种轻量级的数据交换格式,易于阅读和编写。以下是使用 json 模块保存和读取 dict 数据的示例代码:

import json

# 定义一个字典
data = {
    "name": "John",
    "age": 30,
    "city": "New York"
}

# 将字典保存为 JSON 文件
file_path = 'data.json'
try:
    with open(file_path, 'w') as file:
        json.dump(data, file)
    print(f"数据已成功保存到 {file_path}")
except Exception as e:
    print(f"保存数据时出错: {e}")

# 从 JSON 文件中读取数据
try:
    with open(file_path, 'r') as file:
        loaded_data = json.load(file)
    print("从文件中读取的数据:")
    print(loaded_data)
except FileNotFoundError:
    print("错误: 文件未找到!")
except Exception as e:
    print(f"读取数据时出错: {e}")

代码解释

  • 首先,我们定义了一个包含个人信息的字典 data

  • 接着,使用 json.dump() 函数将字典保存到 data.json 文件中。

  • 最后,使用 json.load() 函数从 data.json 文件中读取数据并打印。

2. 使用 pickle 模块保存和读取 dict 数据

pickle 模块可以将 Python 对象序列化为二进制格式,并且可以将其反序列化为原始对象。以下是使用 pickle 模块保存和读取 dict 数据的示例代码:

import pickle

# 定义一个字典
data = {
    "name": "John",
    "age": 30,
    "city": "New York"
}

# 将字典保存为 pickle 文件
file_path = 'data.pickle'
try:
    with open(file_path, 'wb') as file:
        pickle.dump(data, file)
    print(f"数据已成功保存到 {file_path}")
except Exception as e:
    print(f"保存数据时出错: {e}")

# 从 pickle 文件中读取数据
try:
    with open(file_path, 'rb') as file:
        loaded_data = pickle.load(file)
    print("从文件中读取的数据:")
    print(loaded_data)
except FileNotFoundError:
    print("错误: 文件未找到!")
except Exception as e:
    print(f"读取数据时出错: {e}")

代码解释

  • 同样,我们定义了一个包含个人信息的字典 data

  • 然后,使用 pickle.dump() 函数将字典保存到 data.pickle 文件中。注意,pickle 文件是以二进制模式打开的。

  • 最后,使用 pickle.load() 函数从 data.pickle 文件中读取数据并打印。

3. jsonpickle 的对比

  • 数据格式

    • json 是一种文本格式,易于人类阅读和编写,也易于在不同编程语言之间交换数据。

    • pickle 是一种二进制格式,只能在 Python 中使用。

  • 数据类型支持

    • json 只支持基本的数据类型,如 dictliststrintfloatboolNone

    • pickle 可以处理任意的 Python 对象,包括自定义类的实例。

  • 安全性

    • json 是安全的,因为它只包含文本数据。

    • pickle 在反序列化时可能存在安全风险,因为它可以执行任意的 Python 代码。因此,不要从不可信的来源加载 pickle 文件。

综上所述,如果你需要在不同编程语言之间交换数据,或者需要数据具有可读性,那么使用 json 是一个不错的选择。如果你只在 Python 中使用,并且需要处理复杂的 Python 对象,那么可以考虑使用 pickle。但要注意 pickle 的安全性问题。