序列化模块,随机数模块,os模块,sys模块,hashlib模块

只愿长相守 提交于 2021-01-04 07:26:55

模块

json模块

用于多种语言交互  编程语言中的通用数据

内置的模块 不需要安装,直接导入使用

import json  导入一个json模块

dic = {'1':2}

s = json.jumps(dic)          将字典对象转换成字符串

print(types)

d = json.loads(s)              将字符串转换成字典

print(d)

print(type(d))

json.dump({'1':4,open('a','w',encoding='utf-8'))     写入文件

d = json.load(open('a','r',encoding='utf-8'))           读文件

d['1'] = 10                                                              修改文件

json.dump(d,open('a','w',encoding='utf-8'))           把字典d写入到文件a里

d = json.load(open('a','r',encoding='utf-8'))           读文件

print(d)

 

import json
dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = json.dumps(dic)  #序列化:将一个字典转换成一个字符串
print(type(str_dic),str_dic)  #<class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"}
#注意,json转换完的字符串类型的字典中的字符串是由""表示的

dic2 = json.loads(str_dic)  #反序列化:将一个字符串格式的字典转换成一个字典
#注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
print(type(dic2),dic2)  #<class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}


list_dic = [1,['a','b','c'],3,{'k1':'v1','k2':'v2'}]
str_dic = json.dumps(list_dic) #也可以处理嵌套的数据类型 
print(type(str_dic),str_dic) #<class 'str'> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}]
list_dic2 = json.loads(str_dic)
print(type(list_dic2),list_dic2) #<class 'list'> [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2'}]

loads和dumps

dumps loads

 

import json
f = open('json_file','w')
dic = {'k1':'v1','k2':'v2','k3':'v3'}
json.dump(dic,f)  #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
f.close()

f = open('json_file')
dic2 = json.load(f)  #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
f.close()
print(type(dic2),dic2)

dump load

 

 

 1 import json
 2 
 3 ATM
 4 
 5 d = json.load(open('a','r',encoding='utf-8'))
 6 print(d)
 7 
 8 d['money'] += 500
 9 
10 print(d)
11 
12 d['money'] -= 100
13 
14 import json
15 d = json.load(open('a','r',encoding='utf-8'))
16 print(d)

 

json总结

json.loda()                                参数:文件句柄(r) 作用:将文件中字符串转换为字典

json.dump()                                   对象(字典)  参数:文件句柄(w)  将字典转换成字符串写入到文件

json.dumps()                                 对象(字典)    将字典转为字符串

json.loads()                                   字符串(字典)  将字符串转换成字典  

真正的json模块

import json

data = {'username':['李华','二愣子'],'sex':'male','age':16}

json_dic2 = json.dumps(data,sort_keys=True,indent=2,separators=(',',':'),ensure_ascii=False)           (字典名,字典键值对排序,缩进,分隔符(和默认一样),元素内有中文就要有这个)

print(json_dic2)

pickle

只支持python  功能和json类似

import pickle

print(pickle.dumps({'1':4}))                                将对象转换成类似二进制的东西

print(pickle.loads(b'\x80\x03}q\x00X\x01\x00\x00\x001q\x01K\x04s.'))            将一堆类似二进制的东西转换为字典

pickle.dump({'2':4},open('b','wb'))

d = pickle.load(open('b','rb'))

print(d)

 

import pickle
dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = pickle.dumps(dic)
print(str_dic)  #一串二进制内容

dic2 = pickle.loads(str_dic)
print(dic2)    #字典

import time
struct_time  = time.localtime(1000000000)
print(struct_time)
f = open('pickle_file','wb')
pickle.dump(struct_time,f)
f.close()

f = open('pickle_file','rb')
struct_time2 = pickle.load(f)
print(struct_time2.tm_year)

pickle

 

总结

josn,pickle 对比
loads json里的将字符串转换成字典 pickle 将字节转换成字典
dumps json里的将字典转换成字符串 pickle 将字典转换成字节
load json里的将文件中的字符串转换成字典 pickle 将文件中的字节转换成字典
dump json里的将字典转换字符串写入到文件中 pickle 将字典转换成字节写入到文件中


shelve
shelve也是python提供给我们的序列化工具,比pickle用起来更简单一些。
shelve只提供给我们一个open方法,是用key来访问的,使用起来和字典类似。
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)

这个模块有个限制,它不支持多个应用同一时间往同一个DB进行写操作。所以当我们知道我们的应用如果只进行读操作,我们可以让shelve通过只读方式打开DB

import shelve
f = shelve.open('shelve_file', flag='r')
existing = f['key']
f.close()
print(existing)

由于shelve在默认情况下是不会记录待持久化对象的任何修改的,所以我们在shelve.open()时候需要修改默认参数,否则对象的修改不会保存。

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()

设置writeback

writeback方式有优点也有缺点。优点是减少了我们出错的概率,并且让对象的持久化对用户更加的透明了;但这种方式并不是所有的情况下都需要,首先,使用writeback以后,shelf在open()的时候会增加额外的内存消耗,并且当DB在close()的时候会将缓存中的每一个对象都写入到DB,这也会带来额外的等待时间。因为shelve没有办法知道缓存中哪些对象修改了,哪些对象没有修改,因此所有的对象都会被写入


random
随机数
import random
import random  # 内置的
print(random.random())
0-1 之间随机小数

print(random.randint(1,10))
起始位置,终止位置 两头都包含

print(random.randrange(1,21,2))
起始位置,终止位置(不包含),步长

print(random.choice(['alex','wusir','eva_j']))
从有序数据结构中随机选择一个

print(random.choices(['wusir','tialaing','taihei','ritian'],k=2))
随机选择两个,但是有重复

print(random.sample(['wusir','tialaing','taihei','ritian'],k=2))
随机选择两个,没有重复

li = [1,2,3,4,6]
random.shuffle(li) # 洗牌 打乱顺序
print(li)

随机数 验证码 微信红包

U = chr(random.randrange(65,91))
L = chr(random.randrange(97,123))
n1 = random.randrange(0,10)
n2 = random.randrange(0,10)
print(U, L,n1,n2)

os模块

当前执行这个python文件的工作目录相关的工作路径
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
os.curdir 返回当前目录: ('.')
os.pardir 获取当前目录的父目录字符串名:('..')

和文件夹相关
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.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.join('C:\\','app','a','b')   --->  C:app\a\b
os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小

 
sys模块
python解释器交互的 内置的

import sys

print(sys.argv[-1]) ***
接受cmd方式调用 后边的参数会传递进来
linux系统上 -- 后端开发 -- 数据库(文件) ip + 端口

print(sys.path) # 添加自定义模块路径的 # ******

print(sys.version) # 版本 获取解释的版本号

sys.platform = 'win1988'

print(sys.platform) #获取当前操作系统的平台位数 # 不是定死的

print(sys.exit(1))

hashlib 

加密算法

作用: 当做密码
判断一致性
加密后不可逆 不能解 (一年前暴力破解 -- 撞库)
(现在md5 可以通过反推破译出来)

sha1,sha256,sha512

alex3714
**********

import hashlib
md5 = hashlib.md5('盐'.encode('utf-8')) # 选择加密方式 加盐
md5.update('alex3714'.encode('utf-8')) # 将明文转成字节然后进行加密
print(md5.hexdigest()) # 生成密文

md5 = hashlib.md5() # 选择加密方式 加盐
md5.update('alex3714'.encode('utf-8')) # 将明文转成字节然后进行加密
print(md5.hexdigest()) # 生成密文

sha512 = hashlib.sha512()
sha512.update('alex3714'.encode('utf-8'))
print(sha512.hexdigest())


sha512
优点: 安全    缺点:速度慢

md5
优点:安全,快 缺点:易被破解


user,pwd = input('user|pwd:').strip().split('|')
import hashlib

md5 = hashlib.md5(str(user).encode('utf-8'))
md5.update(pwd.encode('utf-8'))
print(md5.hexdigest())

md5,sha1,sha256,sha512

重要内容
1.序列化
json # 必会

dump 把字典转成字符串存入文件
load 将文件的字符串转成字典
dumps 将字典转成字符串
loads 将字符串转成字典

pickle # 了解
shevle # 了解

2. 随机数
random.random() 0-1 之间的小数
验证码
random.randint(1,10)

3. os 操作系统

路径部分
os.path.join
os.path.abspath
os.path.basename
os.path.dirname
os.path.getsize() # 获取大小
os.remove()
os.rename()
os.listdir()
os.chdir() # 切换目录
os.makedirs('app/a/b') 递归创建文件夹
os.removedirs('app/a/b') 递归删除
os.mkdir() 创建单个文件夹
os.rmdir() 删除单个文件夹

4. sys python解释器

sys.argv() 在cmd中执行 可以将文件 后的内容传递到文件中使用
sys.path python解释器加载的路径,自定义模块添加到这里
sys.exit()
sys.version() 获取解释器的版本号
sys.platform 获取当前平台的位数


5. hashlib 加密算法
md5,sha1,sha256,sha512
1.先导入模块
2.创建一个加密方式
3.将要加密的内容编码成字节后加密
4.生成密文

import hashlib
md5 = hashlib.md5(b'alex')
md5.update('alex3714'.encode('utf-8'))
print(md5.hexdigest())
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!