简单谈谈Python中的json与pickle

当我们需要把数据从 Python 中保存到文件中或者把文件中的数据读入到 Python 中时,常用的两种序列化的方式是 json 和 pickle。json 是一种轻量级的数据交换格式,它简单易读,并且容易被人类理解和生成,并且能够在不同的编程语言之间进行数据交换。

Pickle 是一种更高级、更强大的序列化方式,它可以将 Python 中的任意对象序列化成二进制文件,来方便地保存和复原对象。但同时,读取 pickle 文件的时候需要对文件的可信程度进行高度验证,否则可能出现潜在的安全威胁。

接下来针对上述两种序列化方法进行详细讲解:

json 序列化

Python内置的 json 序列化模块可以将 Python 数据结构转换为 json 格式字符串,并可以将 json 格式的字符串转换为 Python 的数据结构。其常用函数如下:

  1. json.dumps(obj, ensure_ascii=True, indent=None):将 Python 数据类型转换为 json 格式的字符串。

其中,

  • obj:需要序列化的 Python 数据类型。
  • ensure_ascii:默认为 True,表示输出的 ASCII 字符,否则输出 Unicode 字符。
  • indent:表示输出的缩进空格数。当 indent 等于 0 时,输出全部在一行。

示例如下:

import json

data = {
    "name": "Tom",
    "age": 20,
    "hobby": ["reading", "running"]
}

# 将 Python 数据类型转换为 json 格式字符串
json_str = json.dumps(data, ensure_ascii=False, indent=4)
print(json_str)

输出结果:

{
    "name": "Tom",
    "age": 20,
    "hobby": [
        "reading",
        "running"
    ]
}
  1. json.loads(s, encoding=None):将 json 格式的字符串转换为 Python 数据类型。

其中,

  • s:需要转换成 Python 数据类型的 json 格式字符串。
  • encoding:指定字符串的编码格式。

示例如下:

import json

json_str = '''
{
    "name": "Tom",
    "age": 20,
    "hobby": [
        "reading",
        "running"
    ]
}
'''

# 将 json 格式的字符串转换为 Python 数据类型
data = json.loads(json_str)
print(data)

输出结果:

{'name': 'Tom', 'age': 20, 'hobby': ['reading', 'running']}

pickle 序列化

Python 标准库中的 pickle 模块可以序列化任意复杂的 Python 对象并将其保存到文件中,也可以将文件中的数据进行反序列化并重新构建出 Python 中原有的对象。其序列化和反序列化的方法分别为:

  1. pickle.dump(obj, file, protocol=None, *, fix_imports=True):将 Python 对象序列化并写入到文件中。

其中,

  • obj:需要序列化的 Python 对象。
  • file:文件类对象,是使用 bin 模式打开的文件对象。
  • protocol:序列化协议版本号,详情请看官方文档。

示例如下:

import pickle

data = {
    "name": "Alex",
    "age": 25,
    "hobby": ["reading", "swimming"]
}

# 将 Python 对象通过 pickle.dump() 函数写入文件
with open("data.pkl", "wb") as f:
    pickle.dump(data, f)
  1. pickle.load(file, *, fix_imports=True, encoding="ASCII", errors="strict"):从文件中读取 pickle 序列化的 Python 对象。

其中,

  • file:文件类对象,是使用 bin 模式打开的文件对象。

示例如下:

import pickle

# 从文件中读取 pickle 序列化的 Python 对象
with open("data.pkl", "rb") as f:
    data = pickle.load(f)

print(data)

输出结果:

{'name': 'Alex', 'age': 25, 'hobby': ['reading', 'swimming']}

需要注意的是,pickle 序列化在默认情况下存在安全问题,所以在读取 pickle 序列化文件时应该谨慎处理,避免被恶意的 pickle 序列化文件攻击。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:简单谈谈Python中的json与pickle - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • python实现股票历史数据可视化分析案例

    Python实现股票历史数据可视化分析案例 介绍 股票历史数据可视化分析是量化投资中重要的一环,既可以了解股票的历史走势,又可以预测未来股票的涨跌趋势。Python是一种使用广泛的编程语言,也是股票数据分析的重要工具之一。本文将详细讲解Python如何实现股票历史数据的可视化分析。 步骤 步骤一:导入必要的库 Python中用于股票数据分析的库有很多,其中比…

    python 2023年5月18日
    00
  • Python OpenCV图像颜色变换示例

    Python的OpenCV库提供了多种图像处理功能,其中包括颜色变换。本攻略将详细介绍如何使用Python OpenCV实现图像颜色变换,并提供两个示例说明。 1. 安装OpenCV 在使用OpenCV库前,需要先安装它。可以使用pip命令进行安装: pip install opencv-python 2. 加载图像 使用OpenCV库的第一步就是读取图像文…

    python 2023年5月19日
    00
  • Android Market API – Python ImportError:没有名为 google.protobuf 的模块

    【问题标题】:Android Market API – Python ImportError: No module named google.protobufAndroid Market API – Python ImportError:没有名为 google.protobuf 的模块 【发布时间】:2023-04-01 07:06:01 【问题描述】: 基…

    Python开发 2023年4月8日
    00
  • Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)

    Python 模拟鼠标点击实现方法 什么是 Python 模拟鼠标点击? Python 模拟鼠标点击就是在 Python 编程环境下通过代码实现模拟鼠标的点击动作。 实现方式 Python 模拟鼠标点击可以通过以下方式实现: PyAutoGUI 库:这是一个 Python 自动化库,通过控制鼠标和键盘操作,可以模拟人类的行为,实现自动化测试等功能。 PyMo…

    python 2023年5月19日
    00
  • Python ttkbootstrap的介绍与使用教程

    Python ttkbootstrap的介绍与使用教程 简介 ttkbootstrap是Python的一个扩展包,可用于使用Bootstrap 4主题来美化Tkinter GUI界面。它基于Python的标准GUI库Tkinter,提供了一组基于Bootstrap 4的Tkinter控件,使Tkinter GUI界面更美观,易于使用。 安装 要安装ttkbo…

    python 2023年6月13日
    00
  • flex中event.preventDefault()方法取消事件的默认行为

    当一个事件被触发时,在事件的传导过程中,事件会按照默认规则来进行处理,如链接默认跳转,表单默认提交等。如果我们想要取消这些默认行为,可以使用event.preventDefault()方法。 一、什么是flex? 在介绍event.preventDefault()方法取消事件默认行为之前,我们先来简单介绍一下flex布局。 flex布局可以让容器内的子元素以…

    python 2023年6月13日
    00
  • TensorFlow 模型载入方法汇总(小结)

    TensorFlow模型载入方法汇总(小结) 当我们在使用TensorFlow开发模型时,通常会涉及到模型的存储与恢复,特别是在使用分布式训练或者长时间训练时。在这篇文章中,我们将会总结一些TensorFlow模型载入的方法。 1. TensorFlow原生方式载入 在TensorFlow中,原生的方式载入模型,最简单的方法是使用tf.train.Saver…

    python 2023年5月13日
    00
  • python 获取list 长度

    获取Python中list的长度非常简单,只需要使用len()函数即可。下面是具体的攻略: 步骤1:准备一个列表 在获取列表长度之前,需要先创建一个Python列表。例如,以下是一个包含5个元素的列表: my_list = [1, 2, 3, 4, 5] 步骤2:使用len()函数获取列表长度 要获取该列表的长度,只需要使用len()函数。该函数将返回一个整…

    python 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部