简单谈谈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日

相关文章

  • 解决pycharm中导入自己写的.py函数出错问题

    这里是解决PyCharm中导入自己写的.py函数出错问题的完整攻略。 1. 确认PyCharm工作环境 首先确认你的PyCharm工作环境是否正确,包括Python版本和项目设置等。确保你正在使用正确的Python版本,并且项目设置中已正确设置Python解释器。如果你不确定某些设置,可以通过以下步骤打开项目设置:点击菜单栏中的“File” -> “S…

    python 2023年5月13日
    00
  • python自动化测试selenium核心技术三种等待方式详解

    Python自动化测试Selenium核心技术三种等待方式详解 前言 在进行Web自动化测试时,我们需要确保页面元素都已经加载完成,否则会影响后续操作。而网络环境、网页渲染速度或网站性能等问题可能导致页面加载速度不一,这就需要测试工程师使用等待机制解决这一问题。 在Selenium中,等待机制有3种方式:隐式等待、显式等待和强制等待。 一、隐式等待 在执行脚…

    python 2023年5月18日
    00
  • python 将字符串转换成字典dict的各种方式总结

    下面是Python将字符串转换成字典的各种方式总结以及两个示例说明。 简介 将字符串转换为字典是Python编程中的常见需求。Python提供了多种方法将字符串转换为字典,例如使用字典解析、eval函数、json模块等。在下面的攻略中,将详细介绍Python将字符串转换成字典的各种方式。 方法一:使用字典解析 字典解析是一种Python语言中的高级技巧,可以…

    python 2023年5月13日
    00
  • Python Flask入门

    Python Flask入门攻略 Python Flask是一种轻量级的Web框架,它可以帮助我们快速地构建Web应用程序。本文将介绍Python Flask的入门攻略,包括安装、基本用法、路由、模板、表单等内容,并提供两个示例。 安装 在使用Python Flask之前,我们需要先安装它。可以使用pip命令来安装Python Flask: pip inst…

    python 2023年5月15日
    00
  • 解决python调用matlab时的一些常见问题

    解决Python调用Matlab时的一些常见问题 在Python中,我们可以使用matlab.engine模块来调用Matlab。但是,在使用这个模块时,可能会遇到一些常见的问题。本文将详细讲解如何解决Python调用Matlab时的一些常见问题,包括Matlab引擎的安装、Matlab引擎的启动、Matlab引擎的关闭等。在过程中,提供两个示例说明,帮助读…

    python 2023年5月13日
    00
  • Python定时发送消息的脚本:每天跟你女朋友说晚安

    下面为你详细讲解如何编写一个Python定时发送消息的脚本,这个脚本可以每天定时给你的女朋友发送晚安的消息。 步骤一:安装模块 Python定时任务需要使用到第三方模块来实现,因此我们需要先安装这些模块。常用的模块是schedule和requests,我们可以使用pip进行安装。 打开命令行,输入如下命令进行安装: pip install schedule …

    python 2023年5月18日
    00
  • 如何用Python来搭建一个简单的推荐系统

    下面是搭建一个简单的推荐系统所需的步骤和示例说明: 步骤一:收集数据 搭建一个推荐系统需要一定的数据量支持,我们需要先收集和整理所需要的数据。数据通常可以从以下几个来源获取: 用户行为数据:用户在网站上的点击、浏览、搜索等行为数据。 物品信息数据:包括物品的基本信息和描述信息等。 用户画像数据:包括用户的个人信息和社交关系等。 收集和整理好数据之后,我们需要…

    python 2023年5月30日
    00
  • python中文乱码不着急,先看懂字节和字符

    针对“Python中文乱码不着急,先看懂字节和字符”的完整攻略,我会从以下几个方面进行讲解: 什么是字符和字节 字符编码的概念 Python中的字符编码问题及解决方案 一、什么是字符和字节 计算机只能识别二进制数字,因此在计算机中,所有数据都必须用二进制表示。而字符和字节就是常见的二进制数据类型。 字符:通常指人们可读取的文本字符,如字母、数字、标点符号、中…

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