python之loggin模块与第三方模块
logging模块详解
主要组成部分
- logger对象,用于产生日志
# 第一步,创建logger对象
logger = logging.getLogger()
filter对象,用于过滤日志,可以不用管,handler对象自带了基本的过滤操作。
handler对象,用于控制日志的输出位置(文件、终端等)
# 第二步,控制输出的位置
# 输出到文件中,可以自定义路径
hd1 = logging.FileHandler('a1.log', encoding='utf-8')
# 输出到文件中
hd2 = logging.FileHandler('a2.log', encoding='utf-8')
# 输出到终端
hd3 = logging.StreamHandler()
- 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',
)
- 给logger对象绑定handler对象
# 第四步,绑定handler对象
# 绑定hd1
logger.addHandler(hd1)
# 绑定hd2
logger.addHandler(hd2)
# 绑定hd3
logger.addHandler(hd3)
- 给handler绑定format对象
# 第五步,绑定format对象
# 让hd1输出fm1的格式
hd1.setFormatter(fm1)
# 让hd2输出fm2的格式
hd2.setFormatter(fm2)
# 让hd3输出fm1的格式
hd3.setFormatter(fm1)
- 设置日志等级
# 第六步,设置日志等级
logger.setLevel(10) # 输出debug及以上的等级的日志
"""
等级:
debug 10
info 20
warning 30
error 40
critical 50
"""
- 输出内容到日志
# 第七步,自定义输出内容
logger.debug('这是一段debug日志内容!!')
logger.info('这是一段info日志内容!!')
配置日志字典
想要输出日志还有一个更加好用的方法,我们可以先配置一个日志字典,定义好参数后,只需要用三行代码就可以把日志输出了。
导入模块和配置输出路径和输出格式
import logging
import logging.config
# 定义复杂的日志输出格式, 其中name为getlogger指定的名字
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 = 'a3.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' # 绑定的输出格式
},
'default': { # 打印到文件的日志
'level': 'DEBUG', # 定义日志可以输出的等级
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard', # 绑定的输出格式
'filename': logfile_path, # 输出的路径
'maxBytes': 1024 * 1024 * 5, # 日志大小 5M
'backupCount': 5, # 日志个数,5个
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
},
'loggers': {
# logging.getLogger(__name__)拿到的logger配置
# 当键不存在的情况下(也就是key设为空字符串),默认都会使用该k:v配置
# loggers配置中使用空字符串作为字典的键,兼容性最好
'': { # 可以当作是日志输出的分类信息
'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'level': 'DEBUG', # 定义日志可以输出的等级
'propagate': True, # 向上(更高level的logger)传递
},
},
}
输出日志
logging.config.dictConfig(LOGGING_DIC) # 自动加载字典中的配置
# 自定义分类信息会传给日志字典中'logger'中的空字符串
logger1 = logging.getLogger('自定义分类信息')
# 输出到日志的信息
logger1.debug('这是一段debug日志')
第三方模块
在python中如果想要使用第三方模块,就需要使用python解释器提供的pip工具。
在使用pip功能的时候需要先将你的python解释器安装目录下的scripts文件夹添加到环境变量中。
安装第三方模块:
方法一:在cmd窗口使用pip命令安装
pip install 模块名
如果想要下载指定版本
pip install 模块名==版本号
如果觉得下载慢,可以添加仓库地址
pip install 模块名 -i 仓库地址
"""
如:
(1)阿里云 https://mirrors.aliyun.com/pypi/simple/
(2)豆瓣 https://pypi.douban.com/simple/
(3)清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
(4)中国科学技术大学 https://pypi.mirrors.ustc.edu.cn/simple/
(5)华中科技大学 https://pypi.hustunique.com/
"""
方法二:使用pycharm中安装
- 打开pycharm,选择左上角file-->setting
- project-->python Interpreter, 点击+号
- 搜索需要的模块并安装
openpyxl模块
openpyxl模块主要是与excel交互的作用,使用前需要下载模块。
打开cmd窗口
pip3 install openpyxl
创建excel文件操作
# 导入模块
from openpyxl import Workbook
# 创建excel文件
wb = Workbook()
# 按顺序创建工作簿
wb1 = wb.create_sheet('高一(0)班')
wb2 = wb.create_sheet('高一(2)班')
wb3 = wb.create_sheet('高一(3)班')
# 指定位置创建工作簿
wb4 = wb.create_sheet('高一(4)', 2) # 2代表第二个
# 改变工作簿名称
wb1.title = '高一(1)班'
# 写入数据
# 往高一(1)班表中的A3位置写入值
wb1['A3'] = '好厉害'
# 往高一(1)班表中第三行第四列的位置写入值
wb1.cell(row=3, column=4, value='我饿了')
# 批量写普通数据
wb1.append(['id','username','password'])
# 保存excel文件
wb.save('wb.xlsx')
运行结果:
读取excel文件操作
"""读取刚刚创建的wb.excel文件"""
# 导入模块
from openpyxl import load_workbook
# 实例化
wb = load_workbook('wb.xlsx',read_only=True,data_only=True)
# 获取wb.xlsx中所有的工作薄名称, 结果是列表数据类型
print(wb.sheetnames)
"""
对于load_workbook()
第一需要加一个参数
第二需要人为的先去修改一下用程序产生的excel表格(不可能用程序产生excel文件之后又直接再用程序去读入,这样没有任何实际意义 通常用程序创建好表格后给人看,人自己修改的表格再交由程序处理)
"""
wb1 = wb['高一(1)班'] # 拿到工作薄高一(1)班对象
# 第一种取值方式
print(wb1['A3'].value) # wb1['A3']不是结果,需要再调用value
# 第二种取值方式
print(wb1.cell(row=3,column=4).value)
运行结果:
['Sheet', '高一(1)班', '高一(4)', '高一(2)班', '高一(3)班']
好厉害
我饿了
获取数据也可以使用for循环
# 获取一行行的数据
for row in wb1.rows: # 拿到每一行的数据
for data in row: # 拿到一行行数据里面每一个单元格的数据
print(data.value)
# 获取一列列的数据(如果想获取 必须把readonly去掉)
for column in wb1.columns: # 拿到每一列的数据
for r in column: # 拿到一列列数据里面每一个单元格的数据
print(r.value)
# 获取最大的行数和列数
print(wb1.max_row)
print(wb1.max_column)
python之loggin模块与第三方模块的更多相关文章
- python基础-7模块,第三方模块安装方法,使用方法。sys.path os sys time datetime hashlib pickle json requests xml
模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...
- 循序渐进nginx(三):日志管理、http限流、https配置,http_rewrite模块,第三方模块安装,结语
目录 日志管理 access_log error_log 日志文件切割 自定义错误页 http访问限流 限制请求数 语法 使用 限制连接数 语法 测试 补充: https配置 使用 生成证书 配置ng ...
- Python学习笔记十_模块、第三方模块安装、模块导入
一.模块.包 1.模块 模块实质上就是一个python文件.它是用来组织代码的,意思就是把python代码写到里面,文件名就是模块的名称,test.py test就是模块的名称 2.包 包,packa ...
- Python通过pip方式安装第三方模块的两种方式
一:环境 python3.6 windows 10 二:常用命令 如果直接执行pip命令报错,说明pip不在path环境变量中 解决方法: python -m pip list 以下默认可直接使用pi ...
- nw.js node-webkit系列(15)如何使用内部模块和第三方模块进行开发
原文链接:http://blog.csdn.net/zeping891103/article/details/50786259 原谅原版链接:https://github.com/nwjs/nw.js ...
- python 内建模块与第三方模块
*)datetime模块 包括时间.时间对象.时间戳.时区.时区的转换 参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/101764878 ...
- c#调用python脚本实现排序(适用于python脚本中不包含第三方模块的情况)
引用:https://www.cnblogs.com/zoe-yan/p/10374757.html 利用vs2017c#调用python脚本需要安装IronPython.我是通过vs2017的工具- ...
- python 标准模块和第三方模块
>>> help('modules') Please wait a moment while I gather a list of all available modules... ...
- python8 标准模块和第三方模块
随机推荐
- poj_1852_Ants(复杂问题简单化)
原题传送门 描述 一群蚂蚁走在长度为l cm的水平细杆上,以1cm/s的匀速.当一只行走的蚂蚁到达杆的一端,它就会掉下去.当两只蚂蚁相遇,它们会掉头像反方向走去.我们知道一只蚂蚁在杆上的初始位置,然而 ...
- 探索前端黑科技——通过 png 图的 rgba 值缓存数据
本文系原创,欢迎转载,转载请注明作者信息项目地址:SphinxJS在线体验地址:https://jrainlau.github.io/sp... 说起前端缓存,大部分人想到的无非是几个常规的方案,比如 ...
- H5移动端开发
开发前准备 环境: Node.js LTS版本 git 最新版 文档: 本项目技术栈基于 ES2016 VueJS vux 快速开始 1.克隆项目 git clone https://gitee.co ...
- Canvas 制作海报
HTML <template> <view class="content"> <view class="flex_row_c_c mod ...
- PYthon窗口学习之用异步请求解决Treeview列表插入大量数据反应慢的解决办法
当列表插入大量数据时,经常会等一会才显示数据 异步请求就将每一个插入语句并发运行,从而提高插入速度 代码: # 显示结果 def insert_result(table, info): def ins ...
- Value注解获取值一直为Null
@Value("${jwt.tokenHeader}") private String tokenHeader; 常见的错误解决办法如下: 1.使用static或final修饰了t ...
- JavaScript操作select下拉框选项移动
运行结果: 源代码: 1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta char ...
- ES7中前端异步特性:async、await。
在最新的ES7(ES2017)中提出的前端异步特性:async.await. 什么是async.await? async顾名思义是"异步"的意思,async用于声明一个函数是异步的 ...
- zabbix 服务器500错误,解决故障。
ZABBIX 500错误,查看apache错误日志,index.php 32 line.写着语法错误!!! 到路径下打开/var/www/html/zabbix/index.php文件,定位32行,可 ...
- asp.net core启动源码以及监听,到处理请求响应的过程
摘要 asp.net core发布至今已经将近6年了,很多人对于这一块还是有些陌生,或者说没接触过:接触过的,对于asp.net core整个启动过程,监听过程,以及请求过程,响应过程也是一知半解,可 ...