序列化模块/模块/包
1 序列指的是字符串数据类型
在写文件以及网络传输的情况下必须要转成字符串,即数据存储的过程
从字符串转化为元数据类的过程称之为反序列化
json模块
pickle模块
shelve模块
1.1 pickle所有的python的数据类型都可以转化成字符串形式
是python特有的,只有python能理解.
可以直接把对象写进去
读出来直接当对象用
pickle.dumps 拍散收到字节
pickle.loads 还原字节
pickle.dump 去掉s,就把打散了的写进文件,不是给人看的,是给计算机看的
pickle.load 读出文件的对象
连读两次读就可以读出来两次的内容,写也是
但是就存在一个问题,读的时候不知道里面有多少个,超出即报错,所以使用
while1: try: 读 expect Exception: break
完美解决方案:
把多个都存在一个列表后再序列化,完事读出来再遍历
1.2 json 是一种通用的序列化格式,多种语言通用
由于其通用性,限制了不是所有的数据类都能够转化成字符串
json 可以认为是字典,但存在不同:TF小写,外加一个null=None
区别的意思是转化成的字符串会存在两种方式间的这三个不同
.dumps(,ensure_ascii=False)就可以解决原类型内有中文的问题了, 此时的内容人是可以看懂的
此时收到的是一个字符换类型,转化为bytes即可传输,.encode('utf-8')
如果写文件去的话,只能放一个对象,多个则套个列表的外壳
2 模块
找到模块,创建这个模块的命名空间,把文件中的变量名和函数名命名空间里
不会重复导入
inport demo 的方式会建立一个独立空间,在程序中随意定义
from demo import 变量名 这个变量名就对应成了这个程序的全局变量
在哪个文件里运行,那哪个文件里的__name__就等于'__main__',
而其他模块引入这个模块的时候,其中的__name__就等于'模块名'
因此在模块最后,加入if __name__=='__main__':
代码(在调用行绝不执行的那种)
3 包是一个文件夹 , 在包内可以写很多个模块,!!!!不论怎么使用,启动文件必须在最外面,查找路劲都是sys.path,是随动,随启动文件所在夹而变
导入分绝对导入和相对导入
绝对路径一般是很安全的,
相对导入一定要在包的外面启动,项目的框架一般内部使用相对导入