python反序列化

前言:最近打比赛遇到了就简单记录学习一下

一、概念

什么是序列化?

  序列化是将 Python 对象转换为一种可以存储或传输的格式的过程。常见的序列化格式包括 JSON、XML、protobuf 以及 Python 自带的 pickle 模块。

什么是反序列化?

  反序列化是将序列化的数据转换回 Python 对象的过程。这使得我们可以从文件、网络或其他存储介质中恢复对象的状态。

Python 中的序列化和反序列化

1. 使用 pickle 模块

pickle 是 Python 内置的序列化和反序列化模块,它可以处理复杂的 Python 对象,包括类实例、列表、字典等。

序列化

import pickle

# 创建一个 Python 对象

data = {'name': 'Alice', 'age': 30}

# 将对象序列化为字节流

with open('data.pickle', 'wb') as f:

         pickle.dump(data, f)

 反序列化

import pickle

# 从字节流中反序列化对象

with open('data.pickle', 'rb') as f:

         loaded_data = pickle.load(f)

print(loaded_data)

# 输出:{'name': 'Alice', 'age': 30}

2. 使用 json 模块

json 模块用于处理 JSON 格式的数据,它也是 Python 中常用的序列化和反序列化工具。

序列化

 import json

# 创建一个 Python 对象

data = {'name': 'Alice', 'age': 30}

# 将对象序列化为 JSON 字符串

json_string = json.dumps(data)

# 将 JSON 字符串写入文件

with open('data.json', 'w') as f:

         json.dump(data, f)

 反序列化

import json

# 从 JSON 字符串中反序列化对象

json_string = '{"name": "Alice", "age": 30}'

loaded_data = json.loads(json_string)

# 从文件中读取 JSON 字符串并反序列化为对象

with open('data.json', 'r') as f:

        loaded_data = json.load(f)

print(loaded_data)

# 输出:{'name': 'Alice', 'age': 30}

 总结:

安全性考虑

pickle 模块的安全性问题

pickle 模块虽然功能强大,但存在一定的安全隐患。反序列化不受信任的数据可能导致安全问题,因为 pickle 可以执行任意代码。因此,在处理不受信任的数据时,应尽量避免使用 pickle

更安全的选择

对于需要在网络上传输或存储的数据,建议使用更安全的序列化格式,如 JSON 或 XML。这些格式虽然不如 pickle 强大,但在安全性和跨平台兼容性方面更有优势。

总结

  • 序列化:将 Python 对象转换为可以存储或传输的格式。
  • 反序列化:将序列化的数据转换回 Python 对象。
  • pickle 模块:支持复杂的 Python 对象,但存在安全风险。
  • json 模块:支持 JSON 格式,更安全,适用于大多数应用场景。
  • 安全性:处理不受信任的数据时,应避免使用 pickle

注意:

pickle 和 json 模块中的序列化和反序列化函数

1. pickle 模块
  • pickle.dumps(obj)

    • 功能:将 Python 对象序列化为一个字节序列。
    • 参数obj 是要序列化的 Python 对象。
    • 返回值:返回一个字节序列(bytes 类型),表示序列化后的对象。
  • pickle.dump(obj, fp)

    • 功能:将 Python 对象序列化并写入到一个文件对象 fp 中。
    • 参数obj 是要序列化的 Python 对象,fp 是一个打开的文件对象。
    • 用途:用于将对象直接写入到文件中。
2. json 模块
  • json.dumps(obj)

    • 功能:将 Python 对象序列化为一个 JSON 格式的字符串。
    • 参数obj 是要序列化的 Python 对象。
    • 返回值:返回一个字符串,表示序列化后的对象。
  • json.dump(obj, fp)

    • 功能:将 Python 对象序列化为 JSON 格式,并写入到一个文件对象 fp 中。
    • 参数obj 是要序列化的 Python 对象,fp 是一个打开的文件对象。
    • 用途:用于将对象直接写入到文件中。

 

python中文件操作模式 

在 Python 中,当我们使用 open 函数打开文件时,可以指定不同的模式来控制文件的读写操作。这些模式通常以一个或多个字符的形式出现在 open 函数的第二个参数中。以下是常见的文件操作模式及其含义:

文件操作模式

  1. r (Read)

    • 说明:以只读方式打开文件。如果文件不存在,则会引发 FileNotFoundError
    • 示例
      1with open('example.txt', 'r') as f:
      2    content = f.read()
  2. w (Write)

    • 说明:以写入方式打开文件。如果文件已存在,其内容将被清空;如果文件不存在,则会创建新文件。
    • 示例
      1with open('example.txt', 'w') as f:
      2    f.write('Hello, world!')
  3. a (Append)

    • 说明:以追加方式打开文件。如果文件已存在,将在文件末尾追加内容;如果文件不存在,则会创建新文件。
    • 示例
      1with open('example.txt', 'a') as f:
      2    f.write('\nNew line added.')
  4. b (Binary)

    • 说明:以二进制模式打开文件。通常用于读写非文本文件,如图片或音频文件。
    • 示例
      1with open('example.bin', 'rb') as f:
      2    data = f.read()
  5. + (Update)

    • 说明:同时打开文件进行读写操作。通常与上述模式结合使用。
    • 示例
      1with open('example.txt', 'r+') as f:
      2    f.write('Updated text.')  # 先写入,再读取
      3    f.seek(0)               # 移动文件指针到文件开头
      4    content = f.read()
  6. x (Exclusive creation)

    • 说明:以独占方式创建新文件。如果文件已存在,则会引发 FileExistsError
    • 示例
      1with open('newfile.txt', 'x') as f:
      2    f.write('This is a new file.')
  7. t (Text)

    • 说明:以文本模式打开文件,默认模式。通常用于文本文件。
    • 示例
      1with open('example.txt', 'wt') as f:
      2    f.write('Text mode example.')

组合模式

  • rt:默认模式,表示以文本模式读取文件。
  • wt:以文本模式写入文件。
  • at:以文本模式追加文件。
  • rb:以二进制模式读取文件。
  • wb:以二进制模式写入文件。
  • ab:以二进制模式追加文件。
  • r+b:以二进制模式读写文件。
  • w+b:以二进制模式写入并读取文件。
  • a+b:以二进制模式追加并读取文件。

示例

以文本模式读取文件
1with open('example.txt', 'r') as f:
2    content = f.read()
3    print(content)
以文本模式写入文件
1with open('example.txt', 'w') as f:
2    f.write('Hello, world!')
以二进制模式读取文件
1with open('example.bin', 'rb') as f:
2    data = f.read()
以二进制模式写入文件
1with open('example.bin', 'wb') as f:
2    f.write(b'Binary data')

总结

  • r:只读模式。
  • w:写入模式,会清空原有内容。
  • a:追加模式。
  • b:二进制模式。
  • +:读写模式。
  • x:独占创建模式。
  • t:文本模式(默认)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/51702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vs2022 C++ 使用MySQL Connector/C++访问mysql数据库

1、下载MySQL Connector/C,我这里下载的是debug版本,下载链接MySQL :: Download MySQL Connector/C (Archived Versions) 2、解压并且放到MySQL文件夹中,便于使用 3、打开vs2022,右键项目,点击属性 4、在 “C/C” ->…

视频技术未来展望:EasyCVR如何引领汇聚融合平台新趋势

随着科技的飞速发展,视频技术已成为现代社会不可或缺的一部分,广泛应用于安防监控、娱乐传播、在线教育、电商直播等多个领域。本文将探讨视频技术的未来发展趋势,并深入分析TSINGSEE青犀EasyCVR视频汇聚融合平台的技术优势,展现其…

HIVE 数据仓库工具之第二部分(数据库相关操作)

HIVE 数据仓库工具之第二部分(数据库相关操作) 一、Hive 对数据库的操作1.1 创建数据库1.1.1 创建数据库语法1.1.3 示例 1.2 使用数据库1.2.1 使用数据库语法1.2.2 示例 1.3 修改数据库1.3.1 修改数据库的语法1.3.2 示例 1.4 删除数据库1.4.1 删除数据库…

JetBrains WebStorm 2024.2 (macOS, Linux, Windows) - 最智能的 JavaScript IDE

JetBrains WebStorm 2024.2 (macOS, Linux, Windows) - 最智能的 JavaScript IDE JetBrains 跨平台开发者工具 请访问原文链接:ttps://sysin.org/blog/jetbrains-webstorm/,查看最新版。原创作品,转载请保留出处。 作者主页:sy…

能大致讲一下Chat GPT的原理吗?

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ 话题群精选了三位网友的回答,从不同的角度阐释了Chat GPT的原理。 第一位网友的回答: 不给你扯长篇大论&#…

人工智能、机器学习和深度学习有什么区别?应用领域有哪些?

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 👍感谢小伙伴们点赞、关注! 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

Python使用OpenCV识别图片人脸

在Python中,识别图片中的人脸并获取人脸区域的坐标,通常可以使用OpenCV库结合Haar特征分类器来实现。 安装OpenCV依赖 pip install opencv-python 识别图片中的人脸并获取其坐标 import cv2 def detect_faces(image_path): # 加载预训练的Haar级联…

LabVIEW项目中硬件选型与长期需求沟通

在LabVIEW项目中,选择合适的硬件和有效的需求沟通是成功的关键。大品牌硬件通常具备更高的稳定性和完善的售后服务,而小品牌虽然看似便宜,却可能带来通讯不稳定、技术支持不足等问题,增加开发难度。同时,在科研类项目中…

Android音视频开发,需要学些什么?

如果你想学习 Android 音视频开发,以下是一些需要学习的内容: 一、基础知识 Java 或 Kotlin 编程语言:Android 开发主要使用这两种语言,确保你对其中一种有扎实的掌握,包括语法、面向对象编程概念、数据结构和算法等…

IaaS、PaaS、SaaS 与 FaaS 的对比与应用

目录 前言正文1. 基本知识2. 差异 前言 主要讲解一个区分点 正文 1. 基本知识 IaaS(基础设施即服务) 定义:IaaS 提供虚拟化的计算资源,如服务器、存储和网络基础设施 用户可以通过互联网访问这些资源,像使用物理硬件…

设计模式-结构型模式-组合模式

1.组合模式的定义 将对象组合成树形结构以表示整个部分的层次结构,组合模式可以让用户统一对待单个对象和对象的组合;其更像是一种数据结构和算法的抽象,其中数据可以表示成树这种数据结构,业务需求可以通过在树上的递归遍历算法来…

设计模式 15 解释器模式

设计模式 15 创建型模式(5):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式结构型模式(7):适配器模式、桥接模式、组合模式、装饰者模式、外观模式、享元模式、代理模式行为型模式&#xff…

C# 什么是属性

1.属性Aproperty)是一种用于访问对象或类型的特征的成员,特征反映了状态 2.属性是字段的自然扩展 从命名上看,field更偏向于实例对象在内存中的布局,property更偏向于反映现实世界对象的特征对外:暴露数据,数据可以是存储在字段里的,也可以是动态计算出来的对内:保护字段不被…

基于机器学习的商品评论情感分析

从淘宝爬取评论 使用Selenium模拟真实登录行为,并爬取数据。 数据清理 如果文本中有“666“,”好好好“等无用词语,去掉评论中的标点符号。 分词 使用jieba精确模式进行分词,构造词典 将词汇向量化 创建词语字典,并…

Java技术栈 —— Spark入门(三)之实时视频流

Java技术栈 —— Spark入门(三)之实时视频流转灰度图像 一、将摄像头数据发送至kafka二、Kafka准备topic三、spark读取kafka图像数据并处理四、本地显示灰度图像(存在卡顿现象,待优化) 项目整体结构图如下 参考文章或视频链接[1] Architectur…

python自动化脚本:让工作自动化起来

Python是一种流行的编程语言,以其简洁和易读性而闻名。它提供了大量的库和模块,使其成为自动化各种任务的绝佳选择。 我们将探讨9个Python脚本及其代码,可以帮助您自动化各种任务并提高工作效率。无论您是开发人员、数据分析师还是只是想简化…

Python-MNE-源空间和正模型07:修复BEM和头表面

有时在创建BEM模型时,由于可能出现的一系列问题(例如,表面之间的交叉),表面需要手动校正。在这里,我们将看到如何通过将表面导出到3D建模程序blender,编辑它们,并重新导入它们来实现这一点。我们还将给出一…

Java 入门指南:初识 Java 并发编程

何为并发编程 并发编程是指在程序中同时执行多个任务的一种编程方式。它通常用于提高程序的性能和响应时间。 在传统的单线程编程模型中,每次只能执行一个任务,当任务阻塞或耗时较长时,整个程序会变得缓慢。而并发编程则可以通过同时执行多…

鸿蒙(API 12 Beta3版)【通过字节数组生成码图】

基本概念 码图生成能力支持将字节数组转换为自定义格式的码图。 场景介绍 码图生成能力支持将字节数组转换为自定义格式的码图。 例如:调用码图生成能力, 将字节数组转换成交通一卡通二维码使用。 约束与限制 只支持QR Code生成,根据纠错水平不同对…

LuaJit分析(七)LuaJit -b 命令分析

Luajit -b 命令用于生成字节码文件,通过之前对 -bl命令的分析: luajit -bl 命令分析 可知,-b系统的命令都通过执行 bcsave.lua脚本来完成, luajit -b命令最终是执行bcsave.lua脚本中的 bcsave函数,bcsave函数代码如下…