Python学习基础笔记四十二——序列化模块

news2024/11/15 12:22:40

1、序列化的概念:

序列:就是字符串。

序列化:将原本的字典、列表等内容转换成一个字符串数据类型的过程就叫做序列化。

反序列化:从字符串到数据类型的过程。

2、序列化的目的:

1、以某种存储形式使自定义的数据持久化;

2、将对象从一个地方传递到另外一个地方;

3、使程序更具维护性;

3、Json模块和Pickle模块:

Json:和别人数据交互的时候使用。Json就是一种通话的序列化格式,是一个沟通的桥梁。只有很少的一部分数据类型可以通过Json转成字符串类型。

Pickle:所有的Python中的数据类型都可以转化成字符串形式。Pickle序列化的内容只有Python能理解。且部分反序列化依赖代码。

Shelve: 序列化句柄,使用句柄直接操作,非常方便。

4、Json的dumps和loads,直接操作内存中的数据类型:

数字、字符串、列表、字典、元组:这几种数据类似可以序列化。Json只能转化很少的数据类型。

import json

# dumps 序列化方法
dic = {'k1': 'v1'}
print(type(dic))
str_d = json.dumps(dic)
print(type(str_d), str_d)

# loads 反序列化方法
dic_d = json.loads(str_d)
print(type(dic_d), dic_d)

输出结果:

说明,序列化的字符串,在大括号里面的都是双引号,这是一个特点。

5、Json dump和load是文件中写和读:

import json

dic = {1: 'a', 2: 'b'}

# json.dump 序列化数据到文件中
f = open('log', 'w', encoding='utf-8')
json.dump(dic, f)
f.close()

# json.load 从数据文件执行反序列化
f = open('log', 'r', encoding='utf-8')
res = json.load(f)
print(type(res), res)
f.close()

 log文件,我通过notepad++工具打开可查看到其中的内容,在Pycharm中还查看不了。

6、如果字典中含有中文字符:

import json

dic = {1: '中国', 2: 'b'}

# json.dump 序列化数据到文件中
f = open('log', 'w', encoding='utf-8')
json.dump(dic, f)
f.close()

# json.load 从数据文件执行反序列化
f = open('log', 'r', encoding='utf-8')
res = json.load(f)
print(type(res), res)
f.close()

log中的文件变成了bytes: 

 

我们将代码进行修改:

 

 

7、再进一步:

import json

lst = [{'k1': '111'}, {'k2': '222'}, {'k3': '333'}]

f = open('log', 'w', encoding='utf-8')
for dic in lst:
    str_d = json.dumps(dic)     # 在内存中对每个字典进行序列化
    f.write(str_d + '\n')       # 然后再将序列化的字符串末尾添加\n
f.close()

 文件中将显示多行信息:

 

import json

l_dest = []
f = open('log')
for line in f:
    dic = json.loads(line.strip())
    l_dest.append(dic)
f.close()

print(l_dest)

结果:

 

8、pickle模块:提供了四个功能:dump、dumps(序列化、存)、loads(反序列化、读)可以把Python中的任意的数据类型序列化。

1)pickle dumps和loads:直接内存操作:

import pickle

dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
str_dic = pickle.dumps(dic)    # 显示bytes类型
print(str_dic)

dic2 = pickle.loads(str_dic)
print(dic2)                    # 字典类型

结果:

 

2) pickle dump和load:跟文件操作有关。

import pickle
import time

struct_time = time.localtime(1670000000)
print(struct_time)
f = open('pickle_file', 'wb')      # wb
pickle.dump(struct_time, f)
f.close()

f = open('pickle_file', 'rb')      # rb
struct_time2 = pickle.load(f)
print(struct_time2.tm_year)
f.close()

 结果:

 再进一步:分步dump和load:json是做不到这个功能的。

import pickle
import time

struct_time1 = time.localtime(1600000000)
struct_time2 = time.localtime(1670000000)

f = open('pickle_file', 'wb')      # wb
pickle.dump(struct_time1, f)
pickle.dump(struct_time2, f)

f.close()

f = open('pickle_file', 'rb')      # rb

struct_time1 = pickle.load(f)
struct_time2 = pickle.load(f)

print(struct_time1.tm_year)
print(struct_time2.tm_year)

f.close()

总结:

1)可以序列化任意数据类型;

2)文件读取模式要加b;

3)可以分步dump和load;

4)pickle_file保存的信息都是乱码;

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

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

相关文章

servlet+Mysql实现的校园论坛管理系统(功能包含登录,首页帖子查看、发帖、个人帖子删除编辑、帖子评论回复、用户管理等)

博客目录servletMysql实现的校园论坛管理系统实现功能截图系统功能使用技术代码完整源码servletMysql实现的校园论坛管理系统 本系统是一个简单的校园论坛系统,学生可以在线发帖并进行帖子评论回复,同同时管理员可以对用户进行管理。 (文末查看完整源码…

win11: cmake+glfw+imgui

下载源码:imgui github地址 将需要的文件拖拽入项目外部库的imgui文件夹 backends文件夹里选择与环境适配的文件,我这里用了glfw和opengl3 目录结构: CMakeLists.txt cmake_minimum_required(VERSION 3.24) project(proforlearn) set(CM…

基于java+springmvc+mybatis+jsp+mysql的实验室计算机故障报修系统

项目介绍 本系统采用java语言开发,后端采用ssm框架,前端采用jsp技术,数据库采用mysql进行数据存储。 前端页面: 功能:首页、设备信息、公告资讯、个人中心、后台管理、联系客服 管理员后台页面: 功能&…

电子学会2020年12月青少年软件编程(图形化)等级考试试卷(二级)答案解析

目录 一、单选题(共25题,每题2分,共50分) 二、判断题(共10题,每题2分,共20分) 三、编程题【该题由测评师线下评分】(共2题,共30分) 青少年软件…

业务流程监控:让多维度监控有了灵魂

需求 《可视化业务流程监控,是解决方案更是运维之道!》一文让我们知道可以借助Grafana 两个插件:Diagram、FlowCharting,满足我们对于图形数据业务流程的可视化监控,但是在使用前需要我们做好以下两点工作&#xff1a…

修复自定义标题word题注错误:错误,文档中没有指定样式的文字以及编号无法随章节变化问题

一、单个修复指定章节号 假设采用自定义样式“毕业”,如果出现类似提示,可以具体操作如下: 光标定位与错误题注的位置,按shift F9 {STYLEREF 1 \s} - 2 将内容修改为 图 {STYLEREF "毕业" \s} - 2 右击,更…

被人叫做砖家模拟器的ChatGPT,它真的靠谱吗?

大家好啊,我是测评君,欢迎来到web测评。 前言 最近很热门的聊天机器人ChatGPT,据说五天时间用户就破了百万,这几天在体验过程中发现了一些问题,今天我就以下列几个方面来跟大家简单的交流下ChatGPT。 ChatGPT怎么注册国…

【博客555】prometheus的step,durations,rate interval,scrape interval对数据查询结果的影响

prometheus的step,durations,rate interval,scrape interval对数据查询结果的影响 1、场景:在查询prometheus数据时出现很多诡异的现象 1、为什么同样的查询语句在不同的时间点查询,对过去某一时刻的数据展示却不一样…

网络拓扑配置案例练习(VRRP,浮动路由,DCHP,三层交换机配置)

网络拓扑配置案例网络拓扑配置案例练习网络拓扑需求描述具体操作命令交换机创建vlan,配置access、trunk口,划分vlanvrrp配置路由配置验证vrrp和浮动路由DHCP配置总结网络拓扑配置案例练习 在这篇文章中将记录网络的常见配置:VRRP&#xff0c…

vue-cli和vue有什么区别

目录 1、什么是 Vue? 2、什么是vue-cli? 3、区别和关联 👉 区别 👉 关联 🍀 扩展知识 “vue-cli”和vue的区别:vue是“vue.js”的简称,是一个成熟的用于构建用户界面的JavaScript渐进式框…

「Docker学习系列教程」9-Docker容器数据卷介绍

通过前面8篇文章的学习,我们已经学会了docker的安装、docker常用的命令已经docker镜像修改后提交的远程镜像仓库及提交到公司的私服仓库中。接下来,我们再来学学Docker另外一个重要的东西-容器数据卷。 我们先来看看一个场景:我们有多个dock…

18. 权重衰退的代码的从零实现和简洁实现

通过一个简单的例子来演示权重衰减。 %matplotlib inline import torch from torch import nn from d2l import torch as d2l0.01就是权重,xi是随机的输入,噪音是均值为0,方差为0.01的一个正态分布 n_train,n_test,num_inputs,batch_size 2…

Alibaba 官方微服务扛把子「SpringCloudAlibaba 全彩学习手册.PDF」,开源学习ing,

最近我在知乎上看过的一个热门回答: 初级 Java 开发面临的最大瓶颈在于,脱离不出自身业务带来的局限。日常工作中大部分时间在增删改查、写写接口、改改 bug,久而久之就会发现,自己的技术水平跟刚工作时相比没什么进步。 所以我们…

Spring Batch 批处理入门案例

引言 书接上篇 何为Spring Batch?怎么玩? ,前面普及了一下Spring Batch 相关介绍,本篇来一个helloword,简单试一下Spring Batch 怎么玩 批量处理流程 开始前,先了解一下Spring Batch程序运行大纲&#x…

[附源码]计算机毕业设计惠农微信小程序论文Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

这些不知道,别说你熟悉 Spring

写在前面 我们大多数 Java 程序员的日常工作基本都是在做业务开发,俗称 crudboy。 作为 crudboy 的你有没有这些烦恼呢? 随着业务的迭代,新功能的加入,代码变得越来越臃肿,可维护性越来越低,慢慢变成了屎…

【亲测有用】ERR_PROXY_CONNECTION_FAILED的解决方案(电脑明明有网络,但就是无法访问浏览器的网页!)

一、问题描述 就我而言,每次遇到这种问题,都是因为电脑意外关机导致的。昨天,我忘记给电脑充电,结果一觉醒来,发现电脑明明有网络,因为微信、QQ甚至向日葵远程连接别的电脑都没有问题,但就是所…

基于java+springboot+mybatis+vue+mysql的漫画动漫管理网站

项目介绍 本系统主要包括管理员和用户两个角色组成,主要包括以下功能: (1)前台:首页、漫画资源、排行榜、交流论坛、公告信息、个人中心、后台管理 。 (2)管理员:首页、个人中心、…

算法基础篇-06-排序-NB三人组(快速/堆/归并排序)

1. NB 三人组介绍 1.1 快速排序(Quick Sort) 时间复杂度:O(nlogn) 归位: 让元素去它该去的位置,保证左边的元素都比他小,右边都比他大; 1.1.1 原理图示: 假设初始列表: 我们从左边第一个…

三秒钟,我要拿到世界杯所有队伍阵容信息

文章目录🕐Im coming~🕑我写了个啥?🕔咋写的?🕘代码供上🕛 See you next time专栏Python零基础入门篇🔥Python网络蜘蛛🔥Python数据分析Django基础入门宝典🔥…