python模块详解

1.random随机数模块

1.1:随机数模块的作用

        在python中random模块可以帮我们产生成伪随机数。

1.2:常见方法

random模块常见方法
方法名表达式结果
randomrandom.random()返回0-1之间的随机小数
randintrandom.randint(1,10))返回1-10之间随机的整数
choicerandom.choice(['谢谢惠顾','再来一瓶','一等奖'])从列表中随机返回一个
samplerandom.choice(['小明','小张','小红','小伟'],2)从列表中随机返回两个
shufflerandom.shuffle(l1)定义一个列表,随机里面数据值顺序返回
1.3:具体操作代码展示
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:

\bullet 因为加盐处理也是人为设定一个值所以也不是很安全因此我们一般用动态加盐;

\bullet 加密之后的结果一般情况下不能反解码,因此当要判断输入的信息与存储的信息是否一致时要对输入的信息用相同的加密方式进行加密后再与存储的加密信息进行判断;

\bullet 当加密大文件时,如果全部进行加密那样的话太慢了,所以要对操作进行优化截取一部分内容进行分段加密;

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('小萎男')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值