简单谈谈Python中的json与pickle

yizhihongxing

当我们需要把数据从 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实现Excel多行多列的转换的示例

    下面我将介绍如何用 Python 实现 Excel 多行多列的转换示例,包括以下内容: 安装必要的库 读取Excel文件数据 转换Excel文件数据 写入转换后数据到新的Excel文件中 以下是完整实例教程: 1. 安装必要的库 这个程序需要用到 pandas 和 openpyxl 库,所以需要先安装: pip install pandas openpyxl…

    python 2023年5月13日
    00
  • 带有特殊字符的 Python 3.5 csv 解析

    【问题标题】:Python 3.5 csv parsing with special characters带有特殊字符的 Python 3.5 csv 解析 【发布时间】:2023-04-01 15:16:01 【问题描述】: 我有一个文件,我想将其解析为 csv。该文件是一个导出文件,并以以下格式(逐行,每个文件包含数千行)到达我这里: 03:30:30 …

    Python开发 2023年4月8日
    00
  • python 匿名函数相关总结

    Python匿名函数相关总结 1. 什么是匿名函数 在Python中,匿名函数就是没有名字的函数,也称为lambda函数。它是一种简单的、只使用一行代码就能定义的函数,通常被用于比较简单的逻辑处理。匿名函数可以传递输入参数,并返回计算结果。 2. 匿名函数的语法 在Python中,匿名函数的语法通常类似于这样: lambda input1,input2,..…

    python 2023年5月14日
    00
  • Python字典添加,删除,查询等相关操作方法详解

    Python字典操作方法详解 什么是字典? Python中的字典(dict)是一种元素为键值对的数据类型。其中,键(key)和值(value)是通过冒号分隔,而每一对键值对又用逗号分隔。例如: {‘name’: ‘Tom’, ‘age’: 18, ‘gender’: ‘male’} 创建字典 可以使用大括号{}或者 dict()方法创建一个字典。例如: # …

    python 2023年5月13日
    00
  • Python如何import文件夹下的文件(实现方法)

    使用Python import文件夹下的文件可以帮助我们更好地组织代码,避免代码结构混乱,同时也可以方便地调用函数和变量。下面是实现此功能的攻略: 将要导入的文件放入一个同名文件夹中,例如我们创建了一个名为”utils”的文件夹,并将我们要导入的函数放置其中。 在主文件中使用 import 语句来导入所需的函数。我们可以使用以下两种导入方式: 方式一:导入整…

    python 2023年6月5日
    00
  • python自动12306抢票软件实现代码

    下面是详细讲解python自动12306抢票软件实现代码的攻略。 1. 网络爬虫 首先,我们需要用网络爬虫获取12306网站的车次余票信息。这里我们推荐使用Python的requests库和BeautifulSoup库获取网页内容和解析HTML。代码示例如下: import requests from bs4 import BeautifulSoup # 获…

    python 2023年5月18日
    00
  • Mac OS X10.9安装的Python2.7升级Python3.3步骤详解

    Mac OS X10.9安装的Python2.7升级Python3.3步骤详解 1. 确认当前Python版本 在终端中输入以下命令: python -V 如果输出类似如下的信息,则当前Python版本为2.7.x: Python 2.7.16 2. 安装Homebrew Homebrew是Mac OS X10.9下的包管理工具,可以方便地安装和管理软件包。…

    python 2023年6月2日
    00
  • python网络编程之数据传输UDP实例分析

    Python网络编程之数据传输UDP实例分析 1. 什么是UDP UDP(User Datagram Protocol,用户数据报协议)是一种无连接的网络传输协议,它不保证数据传输的可靠性和顺序性。UDP以数据报的形式在网络上发送数据,不需要通过建立连接来传输数据,可以发送任何大小的数据报,并且可以将一个UDP数据报发送给多个主机。 由于UDP没有建立连接,…

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