目录
常用模块
logging模块
# 函数式简单配置
"""
import logging
logging.debug('debug message日志') #等级10
logging.info('info message日志') # 等级20
logging.warning('warning message') # 等级30
logging.error('error message') # 等40
logging.critical('critical message') # 等级50
"""
# 灵活配置日志级别、日志格式、输出位置
"""
import logging # d导入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('你好')
"""
# 1.日志分为五个等级: 类似于地震的强度
"""
import logging 模块
logging.debug('debug message日志') #等级10
1.debug 日志:为第一级可以人为的设定等级数>>>10
logging.info('info message日志') # 等级20
2.info 日志:为第二级 设置为20
logging.warning('warning message') # 等级30
3.warning 日志:为第三级 设置为30
logging.error('error message') # 等40
4.error 日志:40
logging.critical('critical message') # 等级50
5.critical 日志:50 记录日志是可以设置的内容的 你设置在那一层就会从那一层开始上记录
"""
# 2. 四个对象:
"""
1.logger 对象>>>产生日志的
2.filter 对象>>>过滤日志
3.handler 对象>>>控制台指定文件输入的位置:输出的位置是文件还是中端。
4.formmater 对象>>> 按照什么格式进行输出的:
"""
# 一、写日志
# 1.logger对象:负责产生日志:
import logging
logger = logging.getLogger('转账明细:')
# 2.2.filter 对象>>>过滤日志 了解
# 3.handler(输出位置文件/终端)
handler1 = logging.FileHandler('a1.log',encoding='utf-8') # 控制台指定的输出的位置:文件a1
handler2 = logging.FileHandler('a2.log',encoding='utf-8') # 控制台指定的输出的位置:文件a2
handler3 = logging.StreamHandler() # 控制台指定的输出的位置:是终端不需要传参数 流的形式
# 4.formmater 对象:规定日志内容的格式的格式
fm1 = logging.Formatter(
fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p')
fm2 = logging.Formatter(
fmt='%(asctime)s - %(name)s: %(message)s',
datefmt='%Y-%m-%d')
# 5.给logger对象绑定(添加)handler 对象
logger.addHandler(handler1) #
logger.addHandler(handler2) #
logger.addHandler(handler3) #
# 6.给handler 绑定formmater对象、
handler1.setFormatter(fm1)
handler2.setFormatter(fm2)
handler3.setFormatter(fm1)
# 7.设置日志等级
logger.setLevel(10)
# 8.记录日志:起始
logger.info('手撸日志 累死了啊')
logging 日志配置字典
三、logging配置字典
import os
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_dir = os.path.dirname(__file__) # log文件的目录
logfile_name = 'a3.log' # log文件名
# 如果不存在定义的日志目录就创建一个
if not os.path.isdir(logfile_dir):
os.mkdir(logfile_dir)
# log文件的全路径
logfile_path = os.path.join(logfile_dir, logfile_name)
# 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)传递
}, # 当键不存在的情况下 默认都会使用该k:v配置
},
}
日志调用 common
# 使用日志字典配置 后期将用函数封装 导入common 生成logger对象
logging.config.dictConfig(LOGGING_DIC) # 自动加载字典中的配置
logger1 = logging.getLogger('asajdjdskaj')
logger1.debug('好好的 不要浮躁 努力就有收获')
hasblib模块
import hashlib
# 生成个md5对象
md = hashlib()
# 加盐
md.update(’都可以加的内容')
md.update('再加点盐')
md.hexdigest()
print(md.hexdigest())
import hashlib
import hashlibdef get_md5(data): md = hashlib.md5() md.update('都可以加的内容'.encode('utf-8')) md.update(data.encode('utf-8')) return md.hexdigest()# 函数调用:password = input('输入密码:').strip()res1 = get_md5(password)print(res1)
openpyxl模块
# openpyxl 比较火的操作excel表格的模块
"""
03版本之前 excel文件的后缀名 叫xls
03版本之后 excel文件的后缀名 叫xlsx
xlwd 写excel
xlrt 读excel
xlwd和xlrt既支持03版本之前的excel文件也支持03版本之后的excel文件
openpyxl 只支持03版本之后的 xlsx
"""
# 1.写excel 表格
from openpyxl import Workbook首先生成一个工作薄
wb = Workbook()
2.创建一个表单页 后面可以通过数字控制位置
wb1 = wb.create_sheet('表格一',0) # 创建一个表单页 后面可以通过数字控制位置
wb2 = wb.create_sheet('表格二',1) # 创建一个表单页 后面可以通过数字控制位置
更改表单页的名字
wb1.title = 'login日志' # 更改表单页的名字
wb2.title = '流水日志' # 可以通过wb2.title更改表单页名字
可以指定按表格填写内容
# wb1 ['A3'] = 1000
# wb1 ['A4'] = 999
# wb1 ['A5'] = '=sum(A3:A4)' #求和
# 可以指定的行和列中写
# wb1.cell(row=6,column=3,value=9999) #
创建一个表头
# 4.创建一个表头
# wb1.append(['username','age','hobby'])
# # 给表格写点内容
# wb1.append(['coco',18,'dancing'])
# wb1.append(['yy',26,'we'])
# wb1.append(['jason',19,'开车'])
# wb1.append(['tank',18,'生蚝'])
最重要的是保存: 保存新建的excel 文件 wb.save('today1.xlsx')
# 先创建一个表格文件
# 1.写 from openpyxl import wordbook
wd = workbook() # 生成一个工作薄对象
1.出创建表单页:
wb1 = wb.create_sheet(参数一是表单页名',0是可以控制位置)
2.改 表单页的名字
wb1.title = ‘lgoin 日志’
#2.wb.save()
3.写内容:操作生成的表单页对象 指定位置填写
4.创建表头
# 操作表单页对象wb1.append([]) 写的时候一一对应
读取表格内容
from openpyxl import load_workbook # 导入读取wb = load_workbook('today1.xlsx',read_only=True,data_only=True)
print(wb.sheetnames) # 拿到表里面的名子
# ['login日志', '流水日志', 'Sheet']
print(wb['login日志']['C3'].value)
res = wb['login日志']
print(res)
w = res.rows
for i in res.rows:
print(i) # <ReadOnlyCell 'login日志'.C5>
for j in i:
print(j.value)
print()
# username
# age
# hobby
# coco
# 18
# dancing
# tank
# 18
# 生蚝
通过代码产生的excel表格必须经过人为操作之后才能读取出函数计算出来的结果值
subprocess模块
# subprocess
"""
sub :子
process:进程
"""
"""
1.用户通过网络连接上了你的这台电脑
2.用户输入相应的命令 基于网络发送给了你这台电脑上某个程序
3.获取用户命令 里面subprocess执行该用户命令
4.将执行结果再基于网络发送给用户
这样就实现 用户远程操作你这台电脑的操作
"""
while True:
cmd = input('cmd>>>:').strip()
import subprocess
obj = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
print(obj)
print('正确命令返回的结果stdout',obj.stdout.read().decode('gbk'))
print('错误命令返回的提示信息stderr',obj.stderr.read().decode('gbk'))