random、json、pickle、hashlib、hmac、shutil、shevle模块
今日内容:
1. random 模块
2. json模块
3. pickle 模块
4.hashlib 模块
5. hmac 模块
6. shutil 模块
7. shelve 模块
1. random 模块:
random 模块 获取随机值
import random for i in range(10):
print(random.random()) # random.random() 随机获取0~1 之间的数字,不包括0和1,
返回的是浮点型0.5319902943759903 0.9539062824026727 随机获取指定范围内的整数值,比如1~10 范围内的整数,包含起始位和结束位
for i in range(10):
print(random.randint(1,10)) 随机获取指定范围内的整数,比如1~10 范围内的整数,不包含结束位置
for i in range(10):
print(random.randrange(1,10)) 随机获取指定范围内的浮点数,比如1~10 范围内的浮点数,返回类型4.793951896180604
for i in range(10):
print(random.uniform(1,10)) random.choice 在item中取值,可以重复,取指定的range('次数')
item = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
for i in range(10):
print(random.choice(item),end='') 如果不使用for循环,每次取一个
item = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(random.choice(item),end='') random.sample 在item中随机取值,根据传入的数字决定每次取值的个数(此处为每次取4个),range('次数')内放取值的次数
item = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
for i in range(10):
print(random.sample(item,4)) 打乱 将item列表打乱
item = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
random.shuffle(item)
print(item) 验证码功能
方法1:
使用chr找到数字所对应的ascii码表中的字母
def random_code(num): # 传入验证码的位数
code = ""
for i in range(num): # 循环五次,取5 次值,然后随机再下列三个条件中选择一个。
d = random.randint(65, 90) # 随机取值后,再在ascii码表中大写字母的位置
x = random.randint(97, 122) # 随机取值后,再在ascii码表中小写字母的位置
n = random.randint(0, 9) # 数字是原意字符,直接转str就行
code += random.choice([chr(d), chr(x), str(n)]) # 此处做字符串拼接
return code res = random_code(5)
print(res) 方法2:
def random_code(num):
code = ""
for i in range(num): # 进入for循环后会随机在1~3之间取值,然后找到相对应的条件,再取值
choose = random.randint(1,3)
if choose == 1:
c = chr(random.randint(65,90)) # 随机取到值后找到对应的acsii码表中的字符
elif choose == 2:
c = chr(random.randint(97,122)) # 随机取到值后找到对应的acsii码表中的字符
else:
c = str(random.randint(0,9)) # 原义字符,直接转成str做字符串拼接用
code += c # 此处做字符串拼接。
return code res = random_code(6)
print(res) 方法3
此方法有投机取巧的嫌疑。。。
def random_code(num):
target = '1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm' # 把所有字母数字做成一个字符串
code_list = random.sample(target, num) # 然后随机抽取指定个数的字符。
return ''.join(code_list) # 然后使用 .join() 的方法拼接 res = random_code(5)
print(res)
2. json模块
json模块
import json json语言,就是一种有语法规范的字符串,用来存放数据的,完成各种语言之间的数据交互
1.只能使用{}与[]的组合,{}存放双列信息(与python中的字典类似),而[]存放单列信息(与python中的列表类似)
2.{}中的key必须是字符串,而且必须使用" " 来包裹
3.{} 与 [] 中支持的值的类型:dict ,list , int , float, bool ,null(类比python中的None), str 案例:
json_str = '{"info":1,"msg":[1,"a",true,false,null,3.14]}'
obj = json.loads(json_str) # json.loads 反序列化,可以把字符串类型转换成它本身的类型
print(obj, type(obj)) # type()后此处obj的类型就变成了dict类型 序列化: 将对象转换成字符串
dumps :只做将对象直接序列化成字符串的工作
dump: 不止做将对象序列化成字符串,还做write()功能,将序列化之后的字符串存储到文件中
obj = {'name': 'owen', "age": 18, 'height': 180, "gender": "男"} # 此处对象为字典类型dict
# r1 = json.dumps(obj, ensure_ascii=False) # 然后使用dumps() 序列化为字符串,并取消默认ascii编码,
# print(r1) # 同该文件的编码(utf-8),python3中默认,python2中需要规定文件头coding:utf-8
with open('1.txt','w',encoding='utf-8') as wf: # 然后通过'w'模式打开文件
json.dump(obj,wf,ensure_ascii=False) # 通过dump()方法来写入文件.(此处dump会把对象序列化并 做write() 的功能,来写入文件中) 反序列化
loads :只做将字符串直接反序列化成对象的工作
load: 不止做将字符串序列化成对象,还做reda()功能,将反序列化之后的字符串读取出来
json_str = '{"name":"owen","age":18,"height":180,"gender":"男"}'
r2 = json.loads(json_str,encoding = 'utf-8') # loads() 将字符串转换为它本身的类型,默认与当前文件的解释器编码一致
print(r2,type(r2)) with open('1.txt','r',encoding='utf-8')as rf:
r3 = json.load(rf)
print(r3,type(r3))
3. pickle 模块
pickle 模块
为什么有很多序列化和反序列模块
因为程序会出现各种各样的对象,如果要将这些对象持久化存储,必须先序列化
只有序列化存储后,必须有对应的反序列化,才能保证你存储数据能够内重新读取使用 什么是序列化?:将对象-->转换成字符串
为什么要序列化?:用来存储再次使用或者传递给别人使用
为什么有很多序列化模块?:存与取的算法可以多种多样,且要配套 pickle序列化做的是直接转成了二进制,那么pickle的功能比json要广泛,因为json只能序列化文本文件,而pickle全部类型的文件都可以序列化
import pickle obj = {"name": "Owen", "age": 18, "height": 180, "gender": "男"} 序列化 dumps()
r1 = pickle.dumps(obj)
print(r1) # 此处返回的是二进制 序列化存储dump()
with open('2.txt','wb')as wf:
pickle.dump(obj,wf) 反序列化
with open('2.txt', 'rb') as rf:
data = rf.read()
ol = pickle.loads(data)
print(ol, type(ol)) 序列化读取load()
with open('2.txt','rb') as rf:
ol = pickle.load(rf)
print(ol,type(ol))
4.hashlib 模块
hashlib模块
不可逆加密:没有解密的加密方式 md5
解密方式:碰撞解密
加密的对象:用于传输的数据(字符串类型的数据)
import hashlib
lock = hashlib.md5() data = '变有钱'
lock.update(data.encode('utf-8')) # 此处声明utf-8是为了告诉hashlib,此处是以utf-8编码的汉字 res = lock.hexdigest() # 此处是将加密后的数据以16进制的格式打印出来
print(res) # 输入结果6bc477bd73049f77b5946f7c18449e65 如果是普通的字母或者数字,可以在字符串前加 b 来声明
data = b'qweasdzxc123'
lock.update(data)
res = lock.hexdigest()
print(res) 一次加密:
1. 获取加密对象,hashlib.md5() --> lock_obj
2. 添加加密数据,lock_obj.update(b'...')...lock_obj.update(b'...')
3. 获取加密结果 lock.hexdigest()-->result
lock = hashlib.md5()
lock.update(b'')
res = lock.hexdigest()
print(res)
特点:加密的总数居一样,加密结果一样,且算法不变,加密结果长度不变 加盐加密
1. 保证原数据过于简单,通过复杂的盐也可以提高解密难度
2. 即使被碰撞解密成功,也不能直接识别盐与有效数据具体的组成
lock_obj = hashlib.md5()
lock_obj.update(b'goodgoodstudy') # 前盐
lock_obj.update(b'123') # 有效数据
lock_obj.update(b'daydayup') # 后盐
res = lock_obj.hexdigest()
print(res) 还有一些其他的加密方式
lock_obj = hashlib.sha3_256()
lock_obj = hashlib.sha3_512()
使用情况很少,不一一介绍
5. hmac 模块
import hmac 使用方法
hmac.new(arg) # 必须提供一个参数
cipher = hmac.new('加密的数据'.encode('utf-8'))
print(cipher.hexdigest()) 加前盐
cipher = hmac.new('前盐'.encode('utf-8'))
cipher.update('加密的数据'.encode('utf-8'))
print(cipher.hexdigest()) 加后盐
cipher = hmac.new('加密的数据'.encode('utf-8'))
cipher.update('后盐'.encode('utf-8'))
print(cipher.hexdigest()) 加前后盐
cipher = hmac.new('前盐'.encode('utf-8'))
cipher.update('加密的数据'.encode('utf-8'))
cipher.update('后盐'.encode('utf-8'))
print(cipher.hexdigest())
6. shutil 模块
shutil 模块 #高级的 文件、文件夹、压缩包 处理模块 import shutil 基于路径的文件复制: shutil.copyfile(a(文件路径),b(新路径))
shutil.copyfile(r'D:\python练习\python十万行代码\学day19\2.txt', r'D:\python练习\python十万行代码\学day19\a\b.txt') 基于流(二进制)的文件赋值 # with open('目标文件',rb)as r,open('新文件','wb')as w:
with open('day19博客.py','rb') as r,open('target_file.py','wb')as w:
shutil.copyfileobj(r,w) 递归删除目标目录 # 必须传入绝对路径,或者是当前目录下的文件夹或者文件
shutil.rmtree(r'D:\python练习\python十万行代码\学day18\a') 文件移动 shutil.move('文件名','新路径+新文件名')
shutil.move('target_file.py', 'part1/new_file.py') 文件夹压缩
file_name:被压缩后形成的文件名
format: 压缩的格式
archive_path:要被压缩的文件夹路径
shutil.make_archive('file_name','format','archive_path') 案例:
shutil.make_archive('abc/my','zip','part1') 文件夹解压
unpack_file: 被解压文件 unpack_name: 解压后的名字 format: 解压格式
shutil.unpack_archive('unpack_file','unpack_name','format') 案例:
shutil.unpack_archive('abc/my.zip','abc/part2','zip')
7. shelve 模块
shelve模块 : 即时存取的序列化模块
import shelve
shv_dic = shelve.open('my.shv')
shv_dic['name'] = 'Owen'
shv_dic['name'] = 'Zero'
shv_dic.close()
shv_dic = shelve.open('my.shv')
print(shv_dic['name'])
stus = ['张三', '涨姿势']
shv_dic['stus'] = stus
print(shv_dic['stus'])
shv_dic.close()
shv_dic = shelve.open('my.shv', writeback=True)
# 将内容从文件中取出,在内存中添加, 如果操作文件有writeback=True,会将内存操作记录实时同步到文件
shv_dic['stus'].append('装13')
print(shv_dic['stus'])
shv_dic.close()
random、json、pickle、hashlib、hmac、shutil、shevle模块的更多相关文章
- 内置模块:time, datetime, random, json, pickle, os, sys, hashlib, collections, re
1.time模块 import time time.time() # 时间戳 浮点数 time.sleep() # 睡眠 time.gmtime()/time.localtime() #结构化时间 数 ...
- 模块之 time datetime random json pickle os sys hashlib collections
目录 1. time模块 1.1表示时间的几种方式: 1.2格式化字符串的时间格式 1.3不同格式时间的转换 2.datetim模块 3.random模块 4. json模块 4.1dumps.loa ...
- Python(正则 Time datatime os sys random json pickle模块)
正则表达式: import re #导入模块名 p = re.compile(-]代表匹配0至9的任意一个数字, 所以这里的意思是对传进来的字符串进行匹配,如果这个字符串的开头第一个字符是数字,就代表 ...
- 面向对象进阶------>模块 json pickle hashlib
何为模块呢? 其实模块就是.py文件 python之所以好用就是模块多 模块分三种 : 内置模块 . 拓展模块.自定义模块. 现在我们来认识:内置模块中的 序列化模块和 hashlib 模块 1 ...
- Python3学习之路~5.12 hashlib & hmac & md5 & sha模块
hashlib模块用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import md5 h ...
- time,datetime,random,os,sys,hashlib,logging,configparser,re模块
#-----time模块----- print(help(time)) #打印time帮助文档 print(time.time()) #打印时间戳 1569824501.6265268 time.sl ...
- Python学习第二阶段Day2(json/pickle)、 shelve、xml、PyYAML、configparser、hashlib模块
1.json/pickle 略. 2.shelve模块 import shelve # shelve 以key value的形式序列化,value为对象 class Foo(object): de ...
- day 5 模块导入、常用模块os shutil sys commands subprocess hashlib json pickle zipfile traceback random datetime
os: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os. ...
- Python——常用模块(time/datetime, random, os, shutil, json/pickcle, collections, hashlib/hmac, contextlib)
1.time/datetime 这两个模块是与时间相关的模块,Python中通常用三种方式表示时间: #时间戳(timestamp):表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. ...
- python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则
python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess ...
随机推荐
- 锁&lock与latch
锁是数据库系统区别于文件系统的一个关键特性.锁机制用于管理对共享资源的并发访问.Innodb不仅仅使用行锁,也会在数据库内部其它地方使用锁,从而允许对多种不同资源提供并发访问.如:操作缓冲池中的LRU ...
- 我遇到的Echarts 最大值不显示&平均值不正常
用Echarts做图表的时候,遇到最大值不显示和平均值不正常的问题,如图: 找了半天,原来是X轴6个坐标有7个数据,只是最后那个数据没有显示出来,而且还是最大的,无语. 加上第七个坐标之后,就显示正常 ...
- [Git] How to revert one file changes from one commit
Many times we might changed one file which we don't intent to do... but it was too late, until we fo ...
- Mysql历史版本下载地址
Mysql历史版本下载地址:http://downloads.mysql.com/archives/community/
- 使用nodejs进行开发,concurrently模块,使我们同时执行多个命令。
concurrently模块使用. 安装模块 npm install concurrently 配置concurrently 运行多个服务 当我们使用nodejs和vue混合开发的时候.当要同时启动后 ...
- ACM-ICPC 2018 沈阳赛区网络预赛 G Spare Tire (素因子分解+容斥)
. 样例输入复制 4 4 样例输出复制 14 #include<bits/stdc++.h> using namespace std; typedef long long ll; cons ...
- WPF之Treeview实现MVVM双向绑定
Treeview分别有两个数据模板HierarchicalDataTemplate(层级数据模板)和DataTemplate(数据模板),分别应用于生成子数据项和普通数据项. 在使用过程中,如果对两个 ...
- HDU 5119 Happy Matt Friends ——(背包DP)
题意:有最多40个数字,取任意个数字他们的异或和>=k则是可行的方案,问有多少种可行的方案. 分析:dp[now][j]表示当前这个值的种类数,那么转移方程为dp[now][j] = dp[pr ...
- error while loading shared libraries: libXXXX.so: cannot open shared object file: No such file or directory
出现这个问题的原因是运行程序缺少依赖库,或者运行程序的依赖库缺少依赖库,可能你的本地目录下面就有这个库文件,但是linux搜索路劲不会从当前路径下去搜索:这种情况可能出现在切换环境上,可能你在一个li ...
- Vue+elementUI+springboot+mybatis demo教程(二)
安装配置node.js安装vue并搭建前台项目前台项目引入elementUI前台项目引入axios本篇主要记录前台项目搭建之前的环境准备,首先要安装node.js(node官网),进行相关配置等. 安 ...