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 ...
随机推荐
- wget下载整个网站---比较实用--比如抓取Smarty的document
wget下载整个网站可以使用下面的命令 wget -r -p -k -np http://hi.baidu.com/phps, -r 表示递归下载,会下载所有的链接,不过要注意的是,不要单独使用这个参 ...
- 聊聊Spring Boot Actuator
概述 在本文中,我们将介绍Spring Boot Actuator.我们将首先介绍基础知识,然后详细讨论Spring Boot 1.x和2.x中的可用内容. 我们将在Spring Boot 1.x中学 ...
- 免费申请通配符类型SSL证书
折腾起因 最近做了个小网站wawoo.fun,一个做mac壁纸的小网站,网站还处在初级阶段,不能跟大神的比.网站发布后发现因为没有使用https,谷歌浏览器会在地址栏提示网站不安全.因此想提升下网站的 ...
- php header() 常用content-type
//定义编码 header( 'Content-Type:text/html;charset=utf-8 '); //Atom header('Content-type: application/at ...
- php原生函数应用
php常见基本的函数 一.字符串函数 implode — 将一个一维数组的值转化为字符串 lcfirst — 使一个字符串的第一个字符小写 ltrim — 删除字符串开头的空白字符(或其他字符) rt ...
- [Qt] 打开Diskmgmt
QProcess mOpenDiskMgmt; QString program = "cmd"; QStringList arguments; arguments << ...
- Spring框架中文件目录遍历漏洞 Directory traversal in Spring framework
官方给出的描述是Spring框架中报告了一个与静态资源处理相关的目录遍历漏洞.某些URL在使用前未正确加密,使得攻击者能够获取文件系统上的任何文件,这些文件也可用于运行SpringWeb应用程序的进程 ...
- 自定义spring boot的自动配置
文章目录 添加Maven依赖 创建自定义 Auto-Configuration 添加Class Conditions 添加 bean Conditions Property Conditions Re ...
- Scala教程之:可扩展的scala
文章目录 隐式类 限制条件 字符串插值 s 字符串插值器 f 插值器 raw 插值器 自定义插值器 Scala是扩展的,Scala提供了一种独特的语言机制来实现这种功能: 隐式类: 允许给已有的类型添 ...
- 【Linux常见命令】split命令
split - split a file into pieces 按照指定的行数或大小分割文件 语法: split [OPTION]... [INPUT [PREFIX]] Output fixed- ...