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 标准模块和第三方模块
随机推荐
- 【动态系统的建模与分析】9_一阶系统的频率响应_低通滤波器_Matlab/Simulink分析
magnitude response:振幅响应 phase response:相位响应 传递函数G(S)为什么将S看成jw化成G(jw)通过[动态系统的建模与分析]8_频率响应_详细数学推导 G(jw ...
- IOS中弹出键盘后出现fixed失效现象的解决方案
概述 这个问题常出现在移动web开发中聊天或者留言页面的绝对定位输入框上,页面超过屏幕大小时候输入框focus状态下(键盘弹出)绝对定位的元素失效,导致页面滚动时候把定位元素一并带走,体验十分不好,在 ...
- 使用Vue2+webpack+Es6快速开发一个移动端项目,封装属于自己的jsonpAPI和手势响应式组件
导语 最近看到不少使用vue制作的音乐播放器,挺好玩的,本来工作中也经常使用Vue,一起交流学习,好的话点个star哦 本项目特点如下 : 1. 原生js封装自己的跨域请求函数,支持promise调用 ...
- EMS监控用户邮箱
案例任务:部署日记规则,用户"王淑江"监控用户"王春海"的邮箱. 1.EMS监控用户邮箱 使用PowerShell命令完成任务:使用日记规则部署"王淑 ...
- win11拖动窗口造成崩溃的问题
问题描述 拖动窗口,随机概率出现 屏幕闪烁 屏幕黑屏 屏幕瞬间分屏 解决方法 windowes11贴吧大神给的方案 1,按下 win键+R 输入 regedit 进入注册表,进入以下路径:计算机\HK ...
- 今天记录一下h5跳转小程序,可以通过短信推广小程序
今天记录一下h5跳转小程序最简单的方法,首先准备条件,是一个已经上线的小程序 根据URL Schame进行跳转,在微信公众平台登录自己的小程序,然后生成RL Schame,如下图 其次按照步骤进行小程 ...
- java基础知识-序列化/反序列化-gson基础知识
以下内容来之官网翻译,地址 1.Gson依赖 1.1.Gradle/Android dependencies { implementation 'com.google.code.gson:gson:2 ...
- js如何判断一个对象是不是Array? 三种方法总有一种可以帮上忙
转载:http://www.nowamagic.net/librarys/veda/detail/1250 在开发中,我们经常需要判断某个对象是否为数组类型,在Js中检测对象类型的常见方法都有哪些呢? ...
- Django学习——静态文件配置、request对象方法、pycharm如何链接数据库、Django如何指定数据库、Django orm操作
静态文件配置 # 1.静态文件 网站所使用的已经提前写好的文件 css文件 js文件 img文件 第三方文件 我们在存储静态文件资源的时候一般默认都是放在static文件夹下 # 2.Django静态 ...
- TCP 协议灵魂 12 问,巩固你的网路底层基础!
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 先亮出这篇文章的思维导图 TCP 作为传输层的协议,是一 ...