python day19

常用模块(二)

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())    #查看加密结果

原文地址:https://www.cnblogs.com/hesujian/p/10834789.html