python学习之老男孩python全栈第九期_day020知识点总结——序列化模块、模块的导入和使用
一. 序列化模块
# 序列化 --> 将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化
# 反序列化 --> 从字符串转换成数据类型的过程叫做反序列化
# 序列 -- 字符串 # 什么地方需要转换成字符串?
# 数据存储:写文件等
# 网络上传输的时候只能传bytes,故需要先转成字符串 # json -- 最重要:*****(5星级)
# pickle -- ****
# shelve -- *** # json
# 好处:通用的序列化格式
# 弊端:只有很少的一部分数据类型能够通过json转化成字符串 # pickle
# 优点:所有的python中的数据类型都可以转化成字符串形式
# 弊端:pickle序列化的内容只有python能理解;且部分反序列化依赖代码 # shelve
# 序列化句柄
# 使用句柄直接操作,非常方便 # json:dumps 序列化方法;loads 反序列化方法
# import json
# dic = {'k1':'v1'}
# print(dic,type(dic)) # {'k1': 'v1'} <class 'dict'>
# str_dic = json.dumps(dic) # 序列化
# print(str_dic,type(str_dic)) # {"k1": "v1"} <class 'str'> 转换成字符串之后,里面的单引号都变成了双引号
#
# dic_dic = json.loads(str_dic) # 反序列化
# print(dic_dic,type(dic_dic)) # {'k1': 'v1'} <class 'dict'> # 数字,字符串,列表,字典 一般可以序列化 ;集合不能转
# 元组也可以序列化,元组序列化是把元组转换成一个列表,再进行序列化;反序列化回来会转换成列表,而不是元组
# tu = (1,2,3,4)
# tu_str = json.dumps(tu)
# print(tu_str,type(tu_str)) # [1, 2, 3, 4] <class 'str'>
# tu_list = json.loads(tu_str)
# print(tu_list,type(tu_list)) # [1, 2, 3, 4] <class 'list'> # json :dump:把数据类型转换成字符串,再传进文件;load
# dic = {'k1':'v1'}
# with open('fff','w',encoding='utf-8') as f:
# json.dump(dic,f)
# with open('fff',encoding='utf-8') as f:
# ret = json.load(f)
# print(ret,type(ret)) # {'k1': 'v1'} <class 'dict'> # dic = {'k1':'中国'}
# with open('fff','w',encoding='utf-8') as f:
# json.dump(dic,f,ensure_ascii=False)
# with open('fff',encoding='utf-8') as f:
# ret = json.load(f)
# print(ret,type(ret)) # dic = {'k1':'中国'}
# with open('fff','w',encoding='utf-8') as f:
# json.dump(dic,f,ensure_ascii=False)
# json.dump(dic,f,ensure_ascii=False)
# with open('fff',encoding='utf-8') as f:
# ret1 = json.load(f)
# # ret2 = json.load(f) # 报错,只能一次读完
# print(ret1,type(ret1))
# # print(ret2,type(ret2)) # json
# dumps {} --> '{}\n'
# 要想一行一行的读
# '{}\n'
# '{}' loads import json
# li = [
# {'k1':'111'},
# {'k2':'222'},
# {'k3':'333'}
# ]
# with open('file','w',encoding='utf-8') as f:
# for dic in li:
# str_dic = json.dumps(dic)
# f.write(str_dic+'\n')
# l = []
# with open('file',encoding='utf-8') as f:
# for line in f:
# dic = json.loads(line.strip())
# l.append(dic)
# print(l) # pickle和json用法基本一致
# pickle可以分步写和读,而json只能分步写 # shelve import shelve
f = shelve.open('shelve_file')
f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'} #直接对文件句柄操作,就可以存入数据
f.close() import shelve
f1 = shelve.open('shelve_file')
existing = f1['key'] #取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错
f1.close()
print(existing) import shelve
f1 = shelve.open('shelve_file')
print(f1['key'])
f1['key']['new_value'] = 'this was not here before'
f1.close() f2 = shelve.open('shelve_file', writeback=True)
print(f2['key'])
f2['key']['new_value'] = 'this was not here before'
f2.close()
二. 模块的导入和使用
# 文件
# import demo
# import demo
# import demo
# import demo # 同一个模块,即便写了多次,但依然只导入一次
# money = 2
# demo.read()
# print(demo.money)
# def read():
# print('my read func')
# # 找到模块
# # 创建这个模块的命名空间
# # 把文件中的名字都放到命名空间里
#
# import sys
# print(sys.modules.keys())
# # 先从sys.modules里查看是否已经被导入
# # 若没有被导入,就依据sys.path路径去寻找模块
# # 找到了就导入
# # 创建这个模块的命名空间
# # 执行文件,把文件中的名字都放到命名空间里
# print(sys.path) import time as t
print(t.time()) # 重命名之后,只能用重命名之后的 # 导入模块顺序:
# 先导内置的
# 再导扩展的:django
# 再导自定义的 # 模块不会重复被导入: sys.moudles
# 从哪导入模块? sys.path # import 模块名
# 模块名.变量名 和本文件中的变量名完全不冲突 # import 模块名 as 重命名的模块名:提高代码的兼容性
# import 模块1,模块2 # from import
# from 模块名 import 变量名
# 直接使用 变量名 就可以完成操作
# 如果本文件中有相同的变量名,会发生冲突 # from 模块名 import 变量名 as 重命名变量名
# from 模块名 import 变量名1,变量名2
# from 模块名 inport *
# 将模块中的所有变量名都放到内存中
# 如果本文件中有相同的变量名会发生冲突
# from 模块名import * 和 __all__ 是一对
# 如果没有没有这个变量,就会导入所有的名字
# 如果有 __all__ ,只导入 all 列表中的名字 # 包
# 一大堆模块的集合
python学习之老男孩python全栈第九期_day020知识点总结——序列化模块、模块的导入和使用的更多相关文章
- python学习之老男孩python全栈第九期_day027知识点总结——反射、类的内置方法
一. 反射 ''' # isinstance class A:pass class B(A):pass a = A() print(isinstance(a,A)) # 判断对象和类的关系 print ...
- python学习之老男孩python全栈第九期_day023知识点总结——类和对象命名空间、组合
一. 类和对象命名空间类里 可以定义两种属性: 1. 静态属性 2. 动态属性 class Course: language = 'Chinese' def __init__(self, teache ...
- python学习之老男孩python全栈第九期_day019知识点总结——collections模块、时间模块、random模块、os模块、sys模块
一. collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:namedtuple.deque.Counte ...
- python学习之老男孩python全栈第九期_day017知识点总结——初识递归、算法
一. 递归函数 如果一个函数在内部调用自身本身,这个函数就是递归函数. 最大递归深度默认是997 -- python从内存角度出发做得限制(而不是程序真的报错),最大深度可以修改 def func(n ...
- python学习之老男孩python全栈第九期_day010知识点总结
def qqxing(l = []): # 可变数据类型 l.append(1) print(l)qqxing() # [1]qqxing([]) # [1]qqxing() # [1, 1]qqxi ...
- python学习之老男孩python全栈第九期_day007知识点总结
基础数据类型汇总 1. str 2. int 3. list 4. bool 5. dict (1) fromkeys Python 字典 fromkeys() 方法用于创建一个新的字典,并以可迭代对 ...
- python学习之老男孩python全栈第九期_day001知识点总结
1. Python2与Python3的区别: Python2:源码不标准,混乱,重复代码太多: Python3:统一标准,去除重复代码. 编码方式: python2的默认编码方式为ASCII码:pyt ...
- python学习之老男孩python全栈第九期_day014知识点总结
# 迭代器和生成器# 迭代器 # 双下方法:很少直接调用的方法,一般情况下,是通过其他语法触发的# 可迭代的 --> 可迭代协议:含有__iter__的方法( '__iter__' in dir ...
- python学习之老男孩python全栈第九期_day016知识点总结
'''数据类型:intbool... 数据结构:dict (python独有的)listtuple (pytho独有的)setstr''' # reverse() 反转l = [1,2,3,4,5]l ...
随机推荐
- [性能分析]linux文件描述符
1.什么是文件和文件描述符 Linux中文件可以分为4种:普通文件.目录文件.链接文件和设备文件.1.普通文件是用户日常使用最多的文件,包括文本文件.shell脚本.二进制的可执行和各种类型的数据.l ...
- 10分钟教你用Python打造天气机器人+关键字自动回复+定时发送
01 前言 Hello,各位小伙伴.自上次我们介绍了Python实现天气预报的功能以后,那个小程序还有诸多不完善的地方,今天,我们再次来完善一下我们的小程序.比如我们想给机器人发“天气”等关键字,它就 ...
- 晦涩难懂的shell命令
初学shell脚本,过程中发现许多不易于理解的脚本语言,网上各种查找学习之后,择优精简一番,做出以下总结,方便以后遗忘了回顾,也为像我一样的初学者提供方便——推荐给初学者的一本书:<Linux ...
- js的语言的理解
1.所谓字面量,就是语言语法 2.在js编译器读到语法时候,执行时候创建对象:在赋值的时候创建一个对象,或者是一个匿名对象. 3.函数定义本身是一个对象:执行时候不产生实例对象:这跟python类不一 ...
- Vultr VPS建站攻略 – 一键安装宝塔面板架设LNMP/LAMP Web环境
我们选择VULTR VPS建站的还是比较多的,其主要原因在于商家的稳定,毕竟我们用来建站选择服务器价格考虑的不是主要的(当然VULTR价格也是比较便宜),最为主要的是因为VULTR商家比较稳定,而且多 ...
- 【性能测试】:对WebSphere中间件的监控方式
1 登录WebSphere控制台 2 选择应用.点击启动和停止来启动和停止应用 3 查看当前活动.点击要查看的项目 4 在开始监测前,先选中服务,点击启动监控将集合状态改为活动的 进入页面后,在页面 ...
- LCS and LIS
LCS #include<bits/stdc++.h> using namespace std; typedef long long ll; int n,m; char s[1005],t ...
- linux 创建软链接和硬链接
Linux 系统中有软链接和硬链接两种特殊的“文件”. 软链接可以看作是Windows中的快捷方式,可以让你快速链接到目标档案或目录. 硬链接则透过文件系统的inode来产生新档名,而不是产生新档案. ...
- redis 数据持久化 aof方式
redis持久化-Append-only file(缩写aof)的方式 本质:把用户执行的每个 ”写“ 指令(增加.修改.删除)都备份到文件中,还原数据的时候就是执行具体写指令. 打开redis的运 ...
- js实现私有变量
一.块级作用域 js中没有块级作用域的概念,可用匿名函数实现,由于匿名函数执行完一遍后,内部没有引用其变量对象的函数,其变量对象被清除,后面则引用不到其中的变量 (function(){ //块级作用 ...