一.序列化
将原本的字典,列表等内容转化成一个字符串的过程就是序列化。
序列化的目的:
1.以某种存储形式使自定义对象持久化
2.将对象从一个地方传递到另一个地方。
3.程序更具有维护性
二. Json 模块
四个功能:dumps dump loads load
2.1 dumps 序列化:将字典转化成字符串,只完成了序列化为str
import json dic={'key1':123456,'key2':'ada lace'} j_dic=json.dumps(dic) #序列化:将字典转化成一个字符串 print(j_dic,type(j_dic)) 结果: {"key1": 123456, "key2": "ada lace"} <class 'str'> #注意:json转换完的字符串类型的字典内的字符串是由“” 表示的。
2.2 loads 反序列化
import json dic={'key1':123456,'key2':'ada lace'} j_dic=json.dumps(dic) #序列化:将字典转化成一个字符串 print(j_dic,type(j_dic))
#下面是loads反序列化: dic1=json.loads(j_dic) print(dic1,type(dic1)) #反序列化:将一个字符串转化成一个字典 #这里注意:要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示 结果: {"key1": 123456, "key2": "ada lace"} <class 'str'> {'key1': 123456, 'key2': 'ada lace'} <class 'dict'>
2.3 dump :必须传文件描述符,将序列化str保存到文件中。
a={"name":'Ada lace',"age":19,'sex':'female'} with open('demo.json','w',encoding='utf-8') as f: f.write(json.dumps(a,indent=4)) #在这里是用dumps 将文件转化成str,再用f.write写入文件 json.dump(a,f,indent=4) #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
2.4 load:只接受文件描述符,完成了读取文件和反序列化。
with open('demo.json','r',encoding='utf-8')as f: a=json.loads(f.read()) #将字符串转化成字典,f..read()读取文件 f.seek(0) #将光标调到开头,否则下次读不到数据。 b=json.load(f) #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回 print(a) print(b) 结果: {'name': 'Ada lace', 'age': 19, 'sex': 'female'} {'name': 'Ada lace', 'age': 19, 'sex': 'female'}
三.pickle模块
json:用于字符串 和 python数据类型间进行转换。 pickle:用于python特有的类型 和 python的数据类型间进行转换 。
pickle模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load (不仅可以序列化字典,列表...可以把python中任意的数据类型序列化)
pickle是python特有的模块.
如果我们将一个字典或者序列化成了一个json存在文件里,那么java代码或者js代码也可以拿来用。 但是如果我们用pickle进行序列化,其他语言就不能读懂这是什么了~
3.1 dumps和loads
import pickle # print(pickle.dumps({'1':4})) #将对象转换成类似二进制的东西 # print(pickle.loads(b'x80x03}qx00Xx01x00x00x001qx01Kx04s.')) # 将一个堆类似于二进制的东西转换成字典
3.2 dump和load
pickle.dump({'2':4},open('b','wb')) d = pickle.load(open('b','rb')) print(d)
总结:
josn,pickle 对比
# loads json里的将字符串转换成字典 pickle 将字节转换成字典
# dumps json里的将字典转换成字符串 pickle 将字典转换成字节
# load json里的将文件中的字符串转换成字典 pickle 将文件中的字节转换成字典
# dump json里的将字典转换字符串写入到文件中,pickle 将字典转换成字节写入到文件中
四.random模块
random是一个随机数模块,生成一些不规范的内容。
获取0-1之间的随机小数
import random print(random.random())
我们可以获取0到1之间的随机的小数,但是还能够满足你,你想要生成指定的数字内的随机小数怎么办??
import random print(random.uniform(1,5))
随机生成整数:
import random print(random.randint(1,5))# 整数1到整数4
随机生成奇数和偶数:
import random print(random.randrange(1,5,2)) #随机生成1-5的奇数 print(random.randrange(0,5,2)) #随机生成0-5的偶数
choice() 方法返回一个列表,元组或字符串的随机项
import random lst = ['张开','宝元','佩奇','太白'] print(random.choices(lst,k=2))
这里可能生成一样的随机项,去除随机项,我们选择sample函数
import random lst = ['张开','宝元','佩奇','太白'] print(random.sample(lst,k=2))
shuffle() 方法将序列的所有元素随机排序
import random list = [20, 16, 10, 5]; random.shuffle(list) print "随机排序列表 : ", list random.shuffle(list) print "随机排序列表 : ", list 结果: 随机排序列表 : [16, 5, 10, 20] 随机排序列表 : [16, 5, 20, 10]
五.os 模块
os模块是与操作系统交互的一个接口
<em>#和文件夹相关 os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
# 和文件相关 os.remove() 删除一个文件 os.rename("oldname","newname") 重命名文件/目录 os.stat('path/filename') 获取文件/目录信息
# 和操作系统差异相关 os.sep 输出操作系统特定的路径分隔符,win下为"\",Linux下为"/" os.linesep 输出当前平台使用的行终止符,win下为" ",Linux下为" " os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为: os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
# 和操作系统差异相关 os.sep 输出操作系统特定的路径分隔符,win下为"\",Linux下为"/" os.linesep 输出当前平台使用的行终止符,win下为" ",Linux下为" " os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为: os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
# 和执行系统命令相关 os.system("bash command") 运行shell命令,直接显示 os.popen("bash command).read() 运行shell命令,获取执行结果 os.environ 获取系统环境变量
#path系列,和路径相关 os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如何path以/或结尾,那么就会返回空值,即os.path.split(path)的第二个元素。 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False os.path.isabs(path) 如果path是绝对路径,返回True os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 os.path.getsize(path) 返回path的大小<br></em>
六.sys 模块
sys模块是与python解释器交互的一个接口
sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1) sys.version 获取Python解释程序的版本信息 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称