常用模块(二)
random模块:随机数
1、random.random() #随机取(0,1)之间的小数(开区间)
2、random.randint(1,10) #随机取[1,10]之间的整数(闭区间)
3、random.randrange(1,10) #随机取[1,10)之间的整数(左闭右开)
4、random.unifrom(1,10) #随机取(1,10)之间的小数(开区间)
5、random.choice(item) #单列集合随机选1个
6、random.sample(item,n) #单列集合随机选n个
7、random.shuffle(item) #洗牌单列集合
json模块:序列化
--json格式是统一的,主要用来传输数据,所以json有自己支持的格式(字符串格式),都是{}与[]嵌套的数据,如果是单数据也可以
--{}相当于字典,[]相当于列表,字符串必须用双引号,null相当于None,布尔值会转成小写,json中字典的key必须是字符串
序列化:dump | dumps 对象 ==>字符串
json.dumps(obj) #可以把对象序列化成字符串
json.dump(obj,file) #可以把对象序列化成字符串并写到文件中
反序列化:load | loads 字符串 ==>对象
json.loads(json_str) #可以把json格式的字符串转换成对象
json.load(file) #可以把文件里存的json格式的字符串转换成对象
pickle模块:序列化
--主要用于存文件,因为他基本什么格式都支持,使用的编码不是utf-8,所以不能用utf-8来解码
序列化:dump | dumps 对象转换成二进制字符串
pickle.dumps(obj) #可以把对象转换成二进制字符串
pickle.dump(obj,write_byte_file) #可以把对象以二进制字符串存到文件中
反序列化:load | loads #可以把二进制字符串转换成对象
pickle.loads(bytes_str) #可以把二进制字符串转换成对象
pickle.load(read_byte_file) #可以把文件中的二进制字符串读出来转换成对象
shelve模块:可以用字典存取数据到文件的序列化模块
序列化:存
s_dic = shelve.open('target_file',writeback = True)
#可以创建出可以用字典存取数据的文件,writeback = True允许序列化的可变类型,
#如果存入可变类型,可以提取出来append()新的值进去
#不可变类型也可以提取出来重新赋值
#打开一次文件结束后必须关闭close
s_dic['key'] = 'value' #这就把value和对应的key一起存入文件中了
反序列化:取
print(s_dic['key']) #就可以把key对应的value取出来
s_dic.close() #释放文件
shutil模块:可以操作权限的处理文件模块(功能比较强大)
#基于路径的文件复制
shutil.copyfile( 'source_file' , 'target_file' )
#基于流的文件复制
with open('source_file','rb') as rf,open('target_file','wb') as wf:
shutil.copyfileobj(rf,wf)
#递归删除目标目录
shutil.rmtree(folder)
#文件移动
shutil.move('old_path','new_path')
#文件压缩
shutil.make_archive('file_name','format','archive_path')
--file_name:压缩完文件路径 format:压缩格式 archive_path:原文件路径
#文件解压
shutil.unpack_archive('unpack_file','unpack_name','format')
--unpack_file:原压缩文件 unpack_name:解压完的文件名 format:解压格式
hashlib模块:加密
--基本都是单向加密,把加密完的数据存到数据库中,用户再次提供数据时就和这个进行比较
cipher = hashlib.md5('需要加密的数据'.encode('utf-8'))
#对于md5来说,定义加密文件的括号里可以写数据也可以不写,写的数据必须是二进制数据
#一次定义完之后可以后续update添加数据,原数据还在,只有重新定义才会没有之前的数据
res = cipher.hexdigest() #获得加密完的结果
cipher.update('二进制数据')
print(res)
# 加盐 :通常是在数据的开始和结尾加盐 --也就是加上一些只有自己知道的特殊符号转换的二进制
--1、可以使原来简单的数据变得复杂,不容易碰撞解密成功
--2、如果被碰撞解密成功,前后加了一些自己的数据,也可以使别人想要获得原数据难度加大
cipher = hashlib.md5()
cipher.update('前盐'.encode('utf-8'))
cipher.update('原数据'.encode('utf-8'))
cipher.update('后盐'.encode('utf-8'))
print(cipher.hexdigest()) #查看最后加密结果
hmac模块:加密
cipher = hmac.new('数据'.encode('utf-8')) #定义的时候在括号里必须写数据或者盐
cipher.update('数据或者盐'.encode('utf-8'))
print(cipher.hexdigest()) #查看加密结果