1.random随机数模块
1.1:随机数模块的作用
在python中random模块可以帮我们产生成伪随机数。
1.2:常见方法
1.3:具体操作代码展示
random模块常见方法 方法名 表达式 结果 random random.random() 返回0-1之间的随机小数 randint random.randint(1,10)) 返回1-10之间随机的整数 choice random.choice(['谢谢惠顾','再来一瓶','一等奖']) 从列表中随机返回一个 sample random.choice(['小明','小张','小红','小伟'],2) 从列表中随机返回两个 shuffle random.shuffle(l1) 定义一个列表,随机里面数据值顺序返回 import random print(random.random()) print(random.randint(1,10)) print(random.choice(['谢谢惠顾', '再来一瓶', '一等奖'])) print(random.sample(['小明', '小张', '小红', '小伟'], 2)) l1 = [1,2,3,4,5,6,7,8,9,'a','b','c','A','B'] random.shuffle(l1) print(l1) '''第一次打印 0.25284858425762635 9 一等奖 ['小红', '小明'] ['A', 8, 2, 'B', 'a', 'b', 7, 6, 5, 9, 4, 3, 'c', 1] 第二次打印 0.0610953488986945 5 谢谢惠顾 ['小明', '小张'] [2, 5, 'B', 'a', 8, 'b', 7, 4, 9, 'c', 1, 'A', 6, 3]'''
2.hashlib加密模块
2.1:加密模块简介
将明文数据进行加密处理转变成密文数据再存储或传输,安全机制让用户的数据不容易泄露,一般情况下一串没有规则的数字字母组合的一般都是加密之后的结果。
2.2:常见加密算法
不同的加密算法复杂度不一样得出的结果长短也不一样,通常情况下加密后的结果越长说明采用的加密算法越复杂。
常见的加密算法有:md5、sha系列(sha1、sha2、sha3)、hmac、base64
2.3:加密模块补充
给一个字符串用md5加密
import hashlib # 导入模块 md5 = hashlib.md5() # 用md5加密 md5.update(b'username') # 数据必须是bytes类型 res = md5.hexdigest() # 获取加密后的结果 print(res) '''打印结果 14c4b06b824ec593239362517f538b29 '''
加盐处理(salt)
import hashlib md5 = hashlib.md5() username = input('输入用户名>>>:').strip() # 获取信息 userpwd = input('输入登陆密码>>>:').strip() md5.update('8888'.encode('utf8')) # 添加一个干扰项 md5.update(username.encode('utf8')) res = md5.hexdigest() md5.update(userpwd.encode('utf8')) res2 = md5.hexdigest() print(res) print(res2) '''打印结果 输入用户名>>>:aaa 输入登陆密码>>>:123 5b8a4e82b23f03c268eaa0e8e120aa63 3e88feba4f098a3d082a09ceae4bc32e '''
ps:
因为加盐处理也是人为设定一个值所以也不是很安全因此我们一般用动态加盐;
加密之后的结果一般情况下不能反解码,因此当要判断输入的信息与存储的信息是否一致时要对输入的信息用相同的加密方式进行加密后再与存储的加密信息进行判断;
当加密大文件时,如果全部进行加密那样的话太慢了,所以要对操作进行优化截取一部分内容进行分段加密;
3.subprocess远程命令模块
3.1:subprocess作用
模拟计算机cmd命令窗口
3.2:代码展示
import subprocess cmd = input('请输入您的指令>>>:').strip() sub = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) # stdout执行命令之后正确的返回结果 print(sub.stdout.read().decode('gbk')) # stderr执行命令报错之后的返回结果 print(sub.stderr.read().decode('gbk')) ''' /bin/sh: stdout: command not found 国内的操作系统默认编码为'gbk' '''
4.logging日志模块
4.1:日志的作用
日志就是记录程序在运行过程中发生的记录,日志文件数据写完后基本不会去改动需要放在配置文件中。
4.2:日志等级
logging.debug('debug等级') # 10 logging.info('info等级') # 20 logging.warning('warning等级') # 默认从warning级别开始记录日志 30 logging.error('error等级') # 40 logging.critical('critical等级') # 50
4.3:基本使用方式
import logging file_handler = logging.FileHandler(filename='x1.log', mode='a', encoding='utf-8',) logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p', handlers=[file_handler,], level=logging.ERROR ) logging.error('我就是我')
4.4:固定的配置字典
import logging import logging.config # 定义日志输出格式 开始 standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \ '[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字 simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s' # 自定义文件路径 logfile_path = 'a3.log' # log配置字典 LOGGING_DIC = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'standard': { 'format': standard_format }, 'simple': { 'format': simple_format }, }, 'filters': {}, # 过滤日志 'handlers': { #打印到终端的日志 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', # 打印到屏幕 'formatter': 'simple' }, #打印到文件的日志,收集info及以上的日志 'default': { 'level': 'DEBUG', 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件 'formatter': 'standard', 'filename': logfile_path, # 日志文件 'maxBytes': 1024*1024*5, # 日志大小 5M 'backupCount': 5, 'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了 }, }, 'loggers': { #logging.getLogger(__name__)拿到的logger配置 '': { 'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕 'level': 'DEBUG', 'propagate': True, # 向上(更高level的logger)传递 }, # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置 # '购物车记录': { # 'handlers': ['default','console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕 # 'level': 'WARNING', # 'propagate': True, # 向上(更高level的logger)传递 # }, # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置 }, } logging.config.dictConfig(LOGGING_DIC) # 自动加载字典中的配置 # logger1 = logging.getLogger('购物车记录') # logger1.warning('尊敬的VIP客户 晚上好 您又来啦') # logger1 = logging.getLogger('注册记录') # logger1.debug('jason注册成功') logger1 = logging.getLogger('体测登记表') logger1.debug('小萎男')