Python全栈开发记录_第八篇(模块收尾工作 json & pickle & shelve & xml)

  由于上一篇篇幅较大,留下的这一点内容就想在这里说一下,顺便有个小练习给大家一起玩玩,首先来学习json 和 pickle。

  之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,eval就不管用了,所以eval的重点还是通常用来执行一个字符串表达式,并返回表达式的值。

什么是序列化?

我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。

序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。

反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。

JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下:

  • json,用于字符串 和 python数据类型间进行转换
  • pickle,用于python特有的类型 和 python的数据类型间进行转换(比如函数、类之类的)
# -*- coding:utf-8 -*-
# -----------------------json序列化----------------
import json
dict1 = {"name": "liu", "age": 18, "sex": "man"}

j_dict = json.dumps(dict1)   # 转成str格式
f = open("json_dumps_text", "w")
f.write(j_dict)     # 等价于json.dump(dict1, f),dump就是帮你转成str然后帮你写入
f.close()

# -----------------------json反序列化----------------
import json
f = open("json_dumps_text", "r")
res = json.loads(f.read())      # 等价于json.load(f),loads就是将读出来的str转化成原本的格式,而load就是将文件句柄内的全部读出来然后转换格式
print(res)
# -*- coding:utf-8 -*-
# -----------------------pickle序列化----------------
import pickle

dict1 = {"name": "liu", "age": 18, "sex": "man"}
p_dict = pickle.dumps(dict1)
print(type(p_dict))     # <class ‘bytes‘>,这里是将str转换成bytes类型
print(p_dict)

f = open("pickle_text", "wb")   # 注意是w是写入str,wb是写入bytess‘
f.write(p_dict)     # 等价于pickle.dump(dict1, f)
f.close()

# -----------------------pickle反序列化----------------
import pickle
f = open("pickle_text", "rb")
data = pickle.loads(f.read())   # 等价于data=pickle.load(f)
print(data[‘name‘])

  shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式。

#  shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型
import shelve

f = shelve.open("shelve_text")
# f[‘info‘] = {"name": "liu", "age": 18, "sex": "man"}      # 将info这个key还有value写入文件
# f.close()

print(f[‘info‘])    # 从文件内取key为info的值
print(f.get(‘info‘)[‘name‘])    # 从文件内取key为info下name的值

小练习:

模拟实现一个ATM + 购物商城程序

1、信用卡额度 15000或自定义
2、实现购物商城,买东西加入 购物车,调用信用卡接口结账
3、信用卡可以提现,手续费5%
4、支持多账户登录
5、支持账户间转账
6、记录每月日常消费流水
7、提供还款接口
8、ATM记录操作日志
9、提供管理接口,包括添加账户、用户额度,冻结账户等。。。
10、用户认证用装饰器

原文地址:https://www.cnblogs.com/leixiaobai/p/10017544.html

时间: 2024-12-12 11:07:54

Python全栈开发记录_第八篇(模块收尾工作 json & pickle & shelve & xml)的相关文章

Python全栈开发记录_第五篇(装饰器)

单独记录装饰器这个知识点是因为这个知识点是非常重要的,必须掌握的. 了解装饰器之前要知道三个知识点 作用域,上一篇讲到过顺序是L->E->G->B 高阶函数: 满足下列其中一种即可称之为高阶函数: a.把一个函数名当做实参传递给另一个函数 b.返回值中包含函数名 3.闭包 闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境),通俗讲法是:在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用.这样就构成了一个闭包.,具体看下面

Python全栈开发记录_第一篇

Python全栈开发记录只为记录全栈开发学习过程中一些难和重要的知识点,还有问题及课后题目,以供自己和他人共同查看.(代码行数:70行) 知识点1:优先级:not>and 短路原则:and:如果第一个条件的结论为假,那么 and 前后两个条件组成的表达式计算结果一定为假,后面的条件计算机不会进行计算 or:如果第一个条件的结论为真,那么or 前后两个条件组成的表达式计算结果一定为真,后面的条件计算机不会进行计算 知识点2:python区分大小写,常量需全部字母大写(默认这样写) python换行

Python全栈开发记录_第九篇(类的基础_封装_继承_多态)

有点时间没更新博客了,今天就开始学习类了,今天主要是类的基础篇,我们知道面向对象的三大特性,那就是封装,继承和多态.内容参考该博客https://www.cnblogs.com/wupeiqi/p/4493506.html 之前我们写的都是函数,可以说是面向过程的编程,需要啥功能就直接写啥,但是我们在编写程序的过程中会发现如果多个函数有共同的参数或数据时,我们也必须多次重复去写,此时如果用面向对象的编程方式就会好很多,这也是面向对象的适用场景. 面向对象三大特性: 一.封装(顾名思义就是将内容封

python全栈开发从入门到放弃之模块和包

一 模块 1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码(.py文件) 2 已被编译为共享库或DLL的C或C++扩展 3 包好一组模块的包 4 使用C编写并链接到python解释器的内置模块 2 为何要使用模块? 如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就

python全栈开发【第十二篇】Python的模块和包

一.模块 1.import.... 一个py文件就可以作为一个模块 模块的导入:直接导入文件的名字,不需要带着后缀 模块中的函数调用:模块名.函数名() 导入模块的时候做了三件事:1.首先开辟了一个新的命名空间my_moudle 2.执行了my_moudle内的代码 3.将my_moudle里面的名字和命名空间绑定在一起了 注意:模块在一个程序中只会被导入一次,不会重复导入(为了节约资源)那么,如何实现模块在程序中只会被导入一次呢?(通过该特性可以实现单例模式) 当导入一个文件之后,会将模块存储

python全栈开发【第十五篇】面向对象三大特性——封装

1.封装: 什么是封装呢?(封装不是单纯意义的隐藏,其实它还是可以查看的) 就是把一些不想让别人看的给隐藏起来了 封装数据:目的是保护隐私 功能封装:目的是隔离复杂度 如果用了私有的,在类的外部,无法直接使用变形的属性,但是在类的内部可以直接使用 # 对象名.属性名取值的三种方法 1.用我们常用的__init__方法里的self取值 class Course:#恰好给我们提供了实现这种思路的方法 # #一种思路,python def __init__(self,price,period,name

python全栈开发【第十六篇】面向对象三大特性——多台和继承补充

一.回顾 面向对象 1.类:具有相同属性和方法 的一类事物 类名可以实例化一个对象 类名可以调用类属性,(静态属性 和(方法)动态属性) 2.对象:也就是实例    对象名:调用对象属性 调用方法 3.什么叫抽象? 从小到大的过程 4.组合-----什么有什么的关系(将一个类的对象当做另一个类的属性) 5.继承-----什么是什么的关系 从大范围到小范围的过程 继承的作用:减少代码的重用性 子类有的方法,就用子类的.不会调用父类的方法. 如果要在子类中调用父类的方法:super().类名() 6

python全栈开发【第十四篇】面向对象三大特性——继承

一.组合 组合:组合指的是,在一个类中以另外一个类的对象(也就是实例)作为数据属性,称为类的组合 也就是说:一个类的属性是另一个类的对象,就是组合 例子: 圆环是由两个圆组成的,圆环的面积就是外圆的面积减去内圆的面积.圆环的周长就是内圆的周长加上外圆的周长,这个时候,我们首先设计一个圆形类,计算一个圆的面积和圆的周长.然后在'圆环类'组合圆形的实例作为自己的属性来用(这样的目的就是为了不用在写面积和周长的方法了,直接组合圆类的面积和方法去求解.减少了代码的重用) #求圆环的面积和周长 from

python全栈开发基础【第二十篇】利用multiprocessing模块开进程

一.multiprocessing模块介绍 python中的多线程无法利用CPU资源(主要指计算密集型任务),在python中大部分情况使用多进程.python中提供了非常好的多进程包multiprocessing. multiprocessing模块用来开启子进程,并在子进程中执行功能(函数),该模块与多线程模块threading的编程接口类似. multiprocessing的功能众多:支持子进程.通信和共享数据.执行不同形式的同步,提供了Process.Queue.Pipe.Lock等组件