ql的python学习之路-day12
前言:这一节主要学习json和pickle
背景:
相信大家在日常生活中都有接触大型的网络游戏,打游戏的时候都是自己在电脑上操作,自己刷怪升级;当然也会碰到中午去吃饭然后挂机的情况,让电脑自动的刷怪,吃完饭后再来继续手动操作。在这个过程中我们有挂机,挂机的时候其实就是将之前的操作(如:用技能1、技能2、大招、左右移动等)都以文件的形式进行保存,吃完饭回来之后又接着之前的状态进行游戏而不是重头开始。我们这里要讲的序列化以及反序列化就跟这个很类似,挂机前的操作保存为文件就是序列化,吃完饭回来再加载之前的游戏就是反序列化;另外,日常我们也用过虚拟机,虚拟机的挂载,挂载后的恢复也是这样的情况。
一、json序列化和反序列化
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:qinjiaxi
'''
1.序列化是指将内存的对象存成字符串;
2.反序列化是指将存起来的字符串变成之前的内存对象;
3.json主要作用是所有语言之间的交互,只能进行简单转换比如字符串、列表、字典等,不能处理函数;
4.xlm和json一样,逐渐被json替代;
'''
import json
info = {
'name' : 'qinlang',
'age' : 3
}
f = open('test.txt', 'w')
# f.write(str(info))
f.write(json.dumps(info))#序列化
f.close()
二、json序列化和反序列化(二)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:qinjiaxi
import json
info = {
'name' : 'qinlang',
'age' : 3, }
f = open('test.txt', 'w')
# f.write(str(info))
f.write(json.dumps(info))#序列化
info['age'] = 4#修改字典中的值
json.dump(info, f)#第二次序列化
f.close() #在python2.7里可以一次一次的load,在3.0中只能load一次
#注意:写程序时,只dump一次,只load一次,如果必须要多次,就要多保存几个文件
import json
f1 = open('test.txt', 'r')
data = json.loads(f1.read())#反序列化
print(data)
f1.close()
三、pickle的序列化和反序列化
序列化:
# Author:qinjiaxi
#pickle相对json来说可以处理复杂的数据类型,但是只能在python中用
import pickle
def sayhi(name):
print("hi",name)
info = {
'name' : 'qinlang',
'age' : 3,
'func' : sayhi
}
f = open('test.txt', 'wb')
# f.write(str(info))
f.write(pickle.dumps(info))#序列化
f.close() pickle.dump(info, f)#第一个是要序列内存的对象,第二个是文件和这个一样f.write(pickle.dumps(info))#序列化
反序列化:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:qinjiaxi
import pickle
#必须加上之前定义的函数,不然会报错,因为之前的函数在序列化中运行后释放了就找不到了
#注:这个函数的内存地址跟之前的不一样,反序列化的是整个函数对象
def sayhi(name):
print("hi",name)
print('hi2',name)#还可以增加其他功能 f1 = open('test.txt', 'rb')
data = pickle.loads(f1.read())#反序列化
print(data)
print(data['func']('hehe'))#
f1.close() data = pickle.load(info,f)#相当于data = pickle.loads(f1.read())#反序列化
ql的python学习之路-day12的更多相关文章
- ql的python学习之路-day15
前言:本节主要讲解的是文件路径 在实际的软件开发中会设计一个项目的文件目录,按照执行包bin.配置包config.核心包core等来设计,在执行包里面要运行核心包里的主程序mian,由于不在同一级的目 ...
- ql的python学习之路-day14
前言:本节主要学习时间模块time.datetime python中的几种时间表示:1)时间戳 2)格式化的字符串时间 3)struct_time元组格式的时间 time.datetime模块源码: ...
- ql的python学习之路-day13
前言:本节主要学习模块 一.模块的定义 模块:本质是.py结尾的python文件(文件名:test.py,对应的模块是:test),用来从逻辑上组织python代码(变量.函数.类.逻辑,本质是实现一 ...
- ql的python学习之路-day11
前言:本节主要学习python内置的方法 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:qinjiaxi from collections ...
- ql的python学习之路-day10
前言:本节主要讲解迭代器和生成器 迭代器&生成器 一.生成器(generator) 循环占用大部分的容量内存,如果只需要循环前面的几个结果那怎么样做呢,在python中有一种一边循环一边计算的 ...
- ql的python学习之路-day9
前言:本节主要学习装饰器 一.装饰器 定义:本质上是个函数,用来装饰其他函数:(就是为其他函数添加附加功能) 原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 以上两点可以总 ...
- ql的python学习之路-day8
前言:本节主要学习的是函数的全局变量和局部变量以及递归 一.全局变量和局部变量 定义在函数外并且在函数头部的变量,叫做全局变量,全局变量在整个代码中都生效. 局部变量只在函数里生效,这个函数就叫做这个 ...
- ql的python学习之路-day7
函数与函数式编程 一.编程模式分为三种: 1.面向对象编程:类----->关键字class 2.面向过程编程:过程----->关键字def,没有return 3.函数式编程:函数----- ...
- ql的python学习之路-day6
字节编码: 这一节主要学习的是各种编码模式的相互转换,另外插两句话,今天的心情不是特别好,又没控制好自己的情绪,以后要心存阳光,好好的对待生活和身边的人. 废话不多说了直接贴码: #!/usr/bin ...
随机推荐
- windows 系统查看NVIDIA显卡GPU情况,nvidia-smi在windows上使用
cd C:\Program Files\NVIDIA Corporation\NVSMI nvidia-smi 当batch_size设置越大的时候,GPU加速越明显,但是batch_size设置 ...
- How to check if directory exist using C++ and winAPI
如果看文件夹是否存在,必须看返回值是不是 INVALID_FILE_ATTRIBUTES #include <windows.h> #include <string> bool ...
- 这个linux命令能让时光倒流!你不知道的date隐藏用法
文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 今天给项目写了个脚本需要获取前一天的时间,本来先获取今天的然后减一下, ...
- 什么是.pyc文件
1. Python是一门解释型语言? Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在. 如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled ...
- Spring Developer Tools 源码分析:三、重启自动配置'
接上文 Spring Developer Tools 源码分析:二.类路径监控,接下来看看前面提到的这些类是如何配置,如何启动的. spring-boot-devtools 使用了 Spring Bo ...
- Hyperf基础教程
前提说明 本教程适用于新手.老手,也适用于任何操作系统,包括Windows.linux.MacOS 介绍 Hyperf 是基于 Swoole 4.4+ 实现的高性能.高灵活性的 PHP 协程框架,内置 ...
- python(面向对象-类封装调用)
一.面对对象思想 (1)大家肯定听过 Python 中”一切皆对象“的说法,但可能并不了解它的具体含义,只是在学习的时候听说 Python 是面向对象的编程语言,本节将向大家详细介绍 Python 面 ...
- vue element select多选回显
我们经常在使用 Element组件里面的 select多选 场景:添加账号的时候需要选择可见分公司(分公司为多选),添加成功之后可以编辑,需要回显添加时所提交的分公司 代码如下: 多选框: data( ...
- Java并发编程实战 03互斥锁 解决原子性问题
文章系列 Java并发编程实战 01并发编程的Bug源头 Java并发编程实战 02Java如何解决可见性和有序性问题 摘要 在上一篇文章02Java如何解决可见性和有序性问题当中,我们解决了可见性和 ...
- LDheatmap | SNP连锁不平衡图(LD)可视化,自己数据实现版!
本文首发于“生信补给站”,https://mp.weixin.qq.com/s/Gl6BChxSYbSHMo9oMpufPg 连锁不平衡图,用来可视化不同SNP之间的连锁程度,前同事间俗称“倒三角”图 ...