Python Json与pickle模块序列化使用介绍

 更新时间:2022年10月11日 09:08:35   作者:Python热爱者  
这篇文章主要为大家介绍了Python中常用的两个序列化模块:pickle序列化和json序列化。文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下

用于序列化的两个模块

  • json,用于字符串 和 python数据类型间进行转换
  • pickle,用于python特有的类型 和 python的数据类型间进行转换

Json模块提供了四个功能:dumps、dump、loads、load

pickle模块提供了四个功能:dumps、dump、loads、load

json.dumps 将数据通过特殊的形式转换为所有程序语言都认识的字符串

json.dump 将数据通过特殊的形式转换为所有程序语言都认识的字符串,并写入文件

pickle.dumps 将数据通过特殊的形式转换为只有Python语言认识的字符串

pickle.dump 将数据通过特殊的形式转换为只有Python语言认识的字符串,并写入文件

Json序列化举例:

json序列化

# json是所有语言中都通用的,适用于不同语言进行数据交互。
# 但json只能处理简单的数据类型,如果要处理复杂的,可以使用pickle
# 应用场景举例:当你使用虚拟机(或者玩游戏)时,中间你突然有点别的事情,于是要将虚拟机挂起,以便下次使用时还是现在的状态。
# 于是就用到了json,json序列化将虚拟机目前的状态(比如进行了什么操作,打开了什么文件)保存在文件中,
# 当你干完别的事,再次启动虚拟机时,json反序列化会将文件中保存的状态从文件中读出来,于是你就可以继续上次的操作了。
# dump和load配合使用可以实现序列化和反序列化,
# 在Python2中可以dump很多次,也可以load很多次,他们一一对应,但是其实这没什么意义
# 但在Python3中,可以dump很多次,但是当dump多次时,load会报错,所以记住在Python3中永远不要dump多次
import json
info = { "name":"Alex", "age":22 }
with open('text.txt','w',encoding='utf-8') as f:
    #f.write(info) #报错,字典不能写入文件中,字符串能写入文件中
    #f.write(str(info)) #太low了
    print(type(json.dumps(info)))  # <class 'str'>
    #f.write( json.dumps(info) ) # 高级做法1
    json.dump(info,f)  # 高级做法2,同上

json反序列化

import json
with open('text.txt','r',encoding='utf8') as f:
    #data=json.loads(f.read())
    data=json.load(f) #同上
    print(data["age"])

pickle序列化举例:

pickle序列化

pickle写进文件中的貌似是一段乱码,其实不然,这是pickle自己的一套语法规则,当然这也不是加密

pickle可以序列化所有的数据类型

但是pickle只能在Python中使用,别的语言不认识它

import pickle
def sayhi(name):
    print("Hello ",name)
info = { "name":"Alex", "age":22, 'func':sayhi }
with open('text2.txt','wb') as f:
    print(type(pickle.dumps(info)))  # <class 'bytes'>
    f.write( pickle.dumps(info) ) # sayhi是一个内存地址,用json序列化就写不到文件中,会报错

pickle反序列化

import pickle
# def sayhi(name):
#     print("Hello2 ",name)
with open('text2.txt','rb') as f:
    data=pickle.loads(f.read()) # 报错
    print(data)
    # data["func"]('alex')
# AttributeError: Can't get attribute 'sayhi' on <module '__main__' from 'D:/python-study/s14/Day04/pickle反序列化.py'>

为什么报错呢?因为sayhi是一个内存地址,当pickle序列化.py程序执行完之后,这个地址就被释放了,当然我们就找不到了。

这里只是想说明一点:pickle可以序列化所有的数据类型,不管这个数据是否可被反序列化

如果想要不报错,可以把sayhi函数的定义拷贝过来,而且还可以执行这个函数

只要保证函数名相同就不会报错,函数体可以完全不一样

json模块的作用之一:根据字符串书写格式,将字符串自动转换成相应格式

import json
# Python3.x中input方法获取到的都是字符串,相当于Python2.x中的raw_input
inp_str = input("请输入:") # 输入一个列表,[1,2,3]
print(type(inp_str)) # <class 'str'>
inp_str = json.loads(inp_str,encoding="UTF-8") # 根据字符串书写格式,将字符串自动转换成 列表类型
print(type(inp_str),inp_str[0]) # <class 'list'> 1
inp_str = input("请输入:") # 输入一个字典,{"name":"Rose","age":21,"sex":"F"}
                             # 切记,字典内部必须是 双引号 !!!单引号会报错。
print(type(inp_str)) # <class 'str'>
inp_str = json.loads(inp_str,encoding="UTF-8") # 根据字符串书写格式,将字符串自动转换成 字典类型
print(type(inp_str),inp_str['name'],inp_str['age'],inp_str['sex']) # <class 'dict'> Rose 21 F

到此这篇关于Python Json与pickle模块序列化使用介绍的文章就介绍到这了,更多相关Python Json与pickle内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python实现飞机大战游戏(pygame版)

    python实现飞机大战游戏(pygame版)

    这篇文章主要为大家详细介绍了python实现pygame版的飞机大战游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • Python queue模块功能大全

    Python queue模块功能大全

    queue模块是Python内置的标准模块,可以直接通过import queue引用,这篇文章主要介绍了Python queue模块都具有哪些功能,需要的朋友可以参考下
    2023-04-04
  • python中使用np.delete()的实例方法

    python中使用np.delete()的实例方法

    在本篇文章里小编给大家整理的是一篇关于python中使用np.delete()的实例方法,对此有兴趣的朋友们可以学习参考下。
    2021-02-02
  • python写日志封装类实例

    python写日志封装类实例

    这篇文章主要介绍了python写日志封装类,实例分析了Python操作日志的相关技巧,需要的朋友可以参考下
    2015-06-06
  • Python实现读取目录所有文件的文件名并保存到txt文件代码

    Python实现读取目录所有文件的文件名并保存到txt文件代码

    这篇文章主要介绍了Python实现读取目录所有文件的文件名并保存到txt文件代码,本文分别使用os.listdir和os.walk实现给出两段实现代码,需要的朋友可以参考下
    2014-11-11
  • python实现的DES加密算法和3DES加密算法实例

    python实现的DES加密算法和3DES加密算法实例

    这篇文章主要介绍了python实现的DES加密算法和3DES加密算法,以实例形式较为详细的分析了DES加密算法和3DES加密算法的原理与实现技巧,需要的朋友可以参考下
    2015-06-06
  • Python实现读取mat、tif和hdr格式数据

    Python实现读取mat、tif和hdr格式数据

    遥感影像数据大多以tif格式或者以hdr格式进行存储,如果以mat格式进行存储,不会保留坐标信息,本文将详细介绍如何使用python来读取这三种格式的数据,需要的可以参考下
    2023-12-12
  • Python3 获取文件属性的方式(时间、大小等)

    Python3 获取文件属性的方式(时间、大小等)

    这篇文章主要介绍了Python3 获取文件属性的方式(时间、大小等),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Tensorflow加载模型实现图像分类识别流程详解

    Tensorflow加载模型实现图像分类识别流程详解

    在视觉领域可以分为:1、图像分类 2、语义分割 3、实例分割 4、目标检测(跟踪) 5、关键点检测。该篇主要讲解利用Tensorflow 对图像进行图像分类
    2022-09-09
  • TensorFlow2.1.0最新版本安装详细教程

    TensorFlow2.1.0最新版本安装详细教程

    TensorFlow是一款优秀的深度学习框架,支持多种常见的操作系统,对大家的学习或工作具有一定的参考借鉴价值,这篇文章主要介绍了TensorFlow2.1.0最新版本安装详细教程,需要的朋友可以参考下
    2020-04-04

最新评论