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 ...
随机推荐
- pytorch 中交叉熵损失实现方法
- vue显示富文本
来源:https://segmentfault.com/q/1010000013952512 用 v-html 属性解决
- tp5.1 依赖注入的使用
参考:概念:https://blog.csdn.net/qq_36172443/article/details/82667427应用: http://www.cnblogs.com/finalandd ...
- QT 获取可执行程序的路径
获取到生成.exe目录 QCoreApplication::applicationDirPath(); 获取当前工程目录 QDir::currentPath()
- 以命令行界面启动 Ubuntu
1. /etc/default/grub 将GRUB_CMDLINE_LINUX_DEFAULT一行中改为"quiet splash 3" 2. update-grub 3. 重启
- Spring Boot Starters介绍
文章目录 Web Start Test Starter Data JPA Starter Mail Starter 结论 对于任何一个复杂项目来说,依赖关系都是一个非常需要注意和消息的方面,虽然重要, ...
- java之 向上转型与向下转型
向上转型 class father { public void eat(){ System.out.println("father eat()"); } } class son e ...
- HTTP 协议图解
HTTP 协议是一个非常重要的网络协议,我们平时能够使用浏览器浏览网页,其中一个非常重要的条件就是HTTP 协议. 0,什么是网络协议 互联网的目的是分享信息,网络协议是互联网的重要组成部分. 在互联 ...
- JavaScript正则表达式及jQuery回顾
JavaScript 正则表达式,用于规定在文本中检索的内容. 一.定义正则表达式: rep = /\d+/; // js定义正则.(python定义正则:re模块 rep = "\d+&q ...
- [20170616]recover copy of datafile 6.txt
[20170616]no copy of datafile 6 found to recover.txt --//最近几天一直被这个问题纠缠,我虽然不知道问题在哪来,还是找到简单的解决方法,做1个记录 ...