一. 序列化模块

# 序列化 --> 将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化
# 反序列化 --> 从字符串转换成数据类型的过程叫做反序列化
# 序列 -- 字符串 # 什么地方需要转换成字符串?
# 数据存储:写文件等
# 网络上传输的时候只能传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知识点总结——序列化模块、模块的导入和使用的更多相关文章

  1. python学习之老男孩python全栈第九期_day027知识点总结——反射、类的内置方法

    一. 反射 ''' # isinstance class A:pass class B(A):pass a = A() print(isinstance(a,A)) # 判断对象和类的关系 print ...

  2. python学习之老男孩python全栈第九期_day023知识点总结——类和对象命名空间、组合

    一. 类和对象命名空间类里 可以定义两种属性: 1. 静态属性 2. 动态属性 class Course: language = 'Chinese' def __init__(self, teache ...

  3. python学习之老男孩python全栈第九期_day019知识点总结——collections模块、时间模块、random模块、os模块、sys模块

    一. collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:namedtuple.deque.Counte ...

  4. python学习之老男孩python全栈第九期_day017知识点总结——初识递归、算法

    一. 递归函数 如果一个函数在内部调用自身本身,这个函数就是递归函数. 最大递归深度默认是997 -- python从内存角度出发做得限制(而不是程序真的报错),最大深度可以修改 def func(n ...

  5. python学习之老男孩python全栈第九期_day010知识点总结

    def qqxing(l = []): # 可变数据类型 l.append(1) print(l)qqxing() # [1]qqxing([]) # [1]qqxing() # [1, 1]qqxi ...

  6. python学习之老男孩python全栈第九期_day007知识点总结

    基础数据类型汇总 1. str 2. int 3. list 4. bool 5. dict (1) fromkeys Python 字典 fromkeys() 方法用于创建一个新的字典,并以可迭代对 ...

  7. python学习之老男孩python全栈第九期_day001知识点总结

    1. Python2与Python3的区别: Python2:源码不标准,混乱,重复代码太多: Python3:统一标准,去除重复代码. 编码方式: python2的默认编码方式为ASCII码:pyt ...

  8. python学习之老男孩python全栈第九期_day014知识点总结

    # 迭代器和生成器# 迭代器 # 双下方法:很少直接调用的方法,一般情况下,是通过其他语法触发的# 可迭代的 --> 可迭代协议:含有__iter__的方法( '__iter__' in dir ...

  9. python学习之老男孩python全栈第九期_day016知识点总结

    '''数据类型:intbool... 数据结构:dict (python独有的)listtuple (pytho独有的)setstr''' # reverse() 反转l = [1,2,3,4,5]l ...

随机推荐

  1. apache2 的https配置和代理https后端nodejs配置

    先进入  /usr/local/apache2/conf  目录 修改 vim httpd.conf  把下面的去掉注释 LoadModule proxy_module modules/mod_pro ...

  2. 确定 RN 中方法的 queue

     如果不指定,每一个模块,都会生成自己的一个串行队列. 可以通过强行声明一个队列来指定所有方法都在这个队列执行 - (dispatch_queue_t)methodQueue { return di ...

  3. iOS ---进阶之摇一摇

    1.摇一摇的原理分析 1)在摇动手机时会产生一个动画,界面的图片会在中间分开分别进行向上.向下的位置移动. 分析:此过程就是在主屏幕上设置两个imageView,在开始摇动的方法中对这两个imageV ...

  4. Visual Studio Code 调试 PHP

    Visual Studio Code 调试 PHP 2018/12/4 更新 Nginx + php-cgi.exe 下与 Visual Studio Code 配合调试 必需环境 Visual St ...

  5. 图解http 笔记

    一,了解web以及网络基础 1,使用http协议访问web web页面是由web浏览器根据地址栏中指定的url从web服务器获取文件资源等信息然后显示的页面. 像这种通过发送请求获取服务器资源的web ...

  6. BLE pairing vs. bonding

    differece between pairing and bonding .see

  7. dubbo集群容错之LoadBalance

    原文地址:Dubbo 源码分析 - 集群容错之 LoadBalance dubbo 提供了4种负载均衡实现,分别是基于权重随机算法的 RandomLoadBalance.基于最少活跃调用数算法的 Le ...

  8. 在MVC程序中使用MongoDB数据库

    .net项目中混搭数据库 安装和部署 C#中使用MongoDB MongoDb与关系型数据库区别 开机自启动 关系型数据库和非关系型数据口可以混搭 MongoDB是一个高性能,开源,无模式的,基于分布 ...

  9. windows 老掉牙CMD的命令

    再老,也得温习下: net use \\' /user:'administrator' //ipc连接 net use \\127.0.0.1\ipc$ /delete //退出ipc net use ...

  10. c++ 网络编程课设入门超详细教程 ---目录

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9663167.html c++ 网络编程(一)TCP/UDP windows/linux 下入门 ...