Welcome!!!

F

伞兵一号,申请出战

常用内置模块和第三方模块

常用内置模块和第三方模块

日志模块的主要组成部分

import logging
# 1. 产生日志对象
logger = logging.getLogger('日志')
# 2.filter对象:过滤日志                                   (剔除不良品)
    # 针对过滤功能完全可以不看 因为handler自带了基本的过滤操作
# 3.handler对象:控制日志输出位置(文件、终端...)
hd1 = logging.FileHandler('a.log',encoding='utf8')  # 输出日志到文件中去
hd2 = logging.StreamHandler()  # 输出到终端
# 4.format对象:控制日志的格式
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(hd1)
logger.addHandler(hd2)
# 6.给handler绑定formmate对象
hd1.setFormatter(fm1)
hd2.setFormatter(fm2)
# 7.设置日志等级
logger.setLevel(40)  # error
# 8.记录日志
logger.error('日志来了')

日志格式化输出

import logging.config
# 定义日志输出格式
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                  '[%(levelname)s][%(message)s]'
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'

# 定义日志文件位置
logfile_path = 'a.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': ['console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
        #     'level': 'WARNING',
        #     'propagate': True,  # 向上(更高level的logger)传递
        # },  # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
    },
}
# 使用日志字典配置
logging.config.dictConfig(LOGGING_DIC)  # 自动加载字典中的配置
logger = logging.getLogger('日志')
logger.debug('出错了')

日志参数

字符参数 效果
%(name)s Logger的名字
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID。可能没有
%(message)s 用户输出的消息

配置字典如何在项目中使用

# 按照软件开发目录规范编写使用
日志字典数据应该放在哪个py文件内
	字典数据是日志模块固定的配置 写完一次之后几乎都不需要动
  它属于配置文件

import logging

from conf import settings


def get_logger(msg):
    # 记录日志
    logging.config.dictConfig(settings.LOGGING_DIC)  # 自动加载字典中的配置
    logger1 = logging.getLogger(msg)
    return logger1

logger = get_logger('日志')
logger.debug('出错了')

第三方模块

# pip工具
	帮助我们使用第三方模块的工具
# 下载第三方模块
	方式一:命令行操作
        cmd中敲命令pip3 install 模块名(默认下载最新版本)
        pip3 install 模块名==版本号  '''自定义下载版本号'''
        ps:pip工具默认是从国外的仓库下载模块 速度会比较慢 可以修改
        pip3 install 模块名 -i 仓库地址  # 命令行临时修改地址
    
    方式二:利用编程工具下载
        settings>project>python interprter>点击加号搜索即可
        更换下载源:manage repositoires

openpyxl模块

"""以后我们会接触到很多第三方模块 那么统一的学习策略其实就是看文档"""
'''openpyxl模块就是操作Excel的'''
# 创建excel文件
wb = Workbook()
wb1 = wb.create_sheet('工作簿1',0)  # 创建工作簿,第二个参数指定工作簿位置
wb2 = wb.create_sheet('工作簿2',1)
wb1.title = '工资表'  # 指定工作簿名称
wb.save('1.xlsx')  # 创建Excel文件

# 写文件
# 1.指定位置写入A列3行
wb1['A3'] = 'oscar'  # 工作簿A3格添加内容oscar
wb.save('1.xlsx')  # 每一次添加完内容都要保存
# 2.指定位置写入(传参型)1(A)列4行
wb1.cell(4,1,'petter')
wb.save('1.xlsx')
# 3.批量写入(接着最后一行写)
wb1.append(['lili',18])
wb.save('1.xlsx')
# 4.公式(也可以在python代码中处理完毕以普通数据写入)
wb1['A6'] = '=sum(A3:B5)'
wb.save('1.xlsx')

# 读文件
# 读文件

from openpyxl import load_workbook
wb = load_workbook('1.xlsx',data_only=True)
print(wb.sheetnames)  # 获取1.xlsx文件的所有工作簿名称
wb1 = wb['工资表']  # 拿到工资表工作簿
# 指定位置取值
print(wb1['A3'].value)  # 取出A3格的值oscar
print(wb1.cell(3,1).value)  # 取出A3格的值oscar
# 一行行取值
for i in wb1.rows:  # 获取每一行的值
    for data in i:  # 遍历每一行的每个值
        print(data.value)

# 获取一列列的数据(如果想获取 必须把readonly去掉)
for column in wb1.columns:  # 拿到每一列的数据
    for r in column:  # 遍历每一个单元格数据
        print(r.value)

# 获取最大的行数和列数
print(wb1.max_row)
print(wb1.max_column)

posted @ 2022-04-01 18:26  程序猿伞兵一号  阅读(81)  评论(0)    收藏  举报