logging模块详解

主要组成部分

  1. logger对象,用于产生日志
# 第一步,创建logger对象
logger = logging.getLogger()
  1. filter对象,用于过滤日志,可以不用管,handler对象自带了基本的过滤操作。

  2. handler对象,用于控制日志的输出位置(文件、终端等)

# 第二步,控制输出的位置

# 输出到文件中,可以自定义路径
hd1 = logging.FileHandler('a1.log', encoding='utf-8')
# 输出到文件中
hd2 = logging.FileHandler('a2.log', encoding='utf-8')
# 输出到终端
hd3 = logging.StreamHandler()
  1. 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',
)
  1. 给logger对象绑定handler对象
# 第四步,绑定handler对象

# 绑定hd1
logger.addHandler(hd1)
# 绑定hd2
logger.addHandler(hd2)
# 绑定hd3
logger.addHandler(hd3)
  1. 给handler绑定format对象
# 第五步,绑定format对象

# 让hd1输出fm1的格式
hd1.setFormatter(fm1)
# 让hd2输出fm2的格式
hd2.setFormatter(fm2)
# 让hd3输出fm1的格式
hd3.setFormatter(fm1)
  1. 设置日志等级
# 第六步,设置日志等级
logger.setLevel(10) # 输出debug及以上的等级的日志
"""
等级:
debug 10
info 20
warning 30
error 40
critical 50
"""
  1. 输出内容到日志
# 第七步,自定义输出内容
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中安装

  1. 打开pycharm,选择左上角file-->setting
  2. project-->python Interpreter, 点击+号

  3. 搜索需要的模块并安装

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模块与第三方模块的更多相关文章

  1. python基础-7模块,第三方模块安装方法,使用方法。sys.path os sys time datetime hashlib pickle json requests xml

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  2. 循序渐进nginx(三):日志管理、http限流、https配置,http_rewrite模块,第三方模块安装,结语

    目录 日志管理 access_log error_log 日志文件切割 自定义错误页 http访问限流 限制请求数 语法 使用 限制连接数 语法 测试 补充: https配置 使用 生成证书 配置ng ...

  3. Python学习笔记十_模块、第三方模块安装、模块导入

    一.模块.包 1.模块 模块实质上就是一个python文件.它是用来组织代码的,意思就是把python代码写到里面,文件名就是模块的名称,test.py test就是模块的名称 2.包 包,packa ...

  4. Python通过pip方式安装第三方模块的两种方式

    一:环境 python3.6 windows 10 二:常用命令 如果直接执行pip命令报错,说明pip不在path环境变量中 解决方法: python -m pip list 以下默认可直接使用pi ...

  5. nw.js node-webkit系列(15)如何使用内部模块和第三方模块进行开发

    原文链接:http://blog.csdn.net/zeping891103/article/details/50786259 原谅原版链接:https://github.com/nwjs/nw.js ...

  6. python 内建模块与第三方模块

    *)datetime模块 包括时间.时间对象.时间戳.时区.时区的转换 参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/101764878 ...

  7. c#调用python脚本实现排序(适用于python脚本中不包含第三方模块的情况)

    引用:https://www.cnblogs.com/zoe-yan/p/10374757.html 利用vs2017c#调用python脚本需要安装IronPython.我是通过vs2017的工具- ...

  8. python 标准模块和第三方模块

    >>> help('modules') Please wait a moment while I gather a list of all available modules... ...

  9. python8 标准模块和第三方模块

随机推荐

  1. js 关于setTimeout和Promise执行顺序问题

    js 关于setTimeout和Promise执行顺序问题 异步 -- Promise和setTimeout 执行顺序   Promise 和 setTimeout 到底谁先执行 定时器的介绍 Jav ...

  2. 从CSS盒子模型说起

    前言 总括: 对于盒子模型,BFC,IFC和外边距合并等概念和问题的总结 原文地址:从CSS盒子模型说起 知乎专栏:前端进击者 博主博客地址:Damonare的个人博客 为学之道,莫先于穷理:穷理之要 ...

  3. 认识 Function.prototype.bind()

    欢迎前端爱好者加入QQ群:112916679 答疑解惑,且可获取更多前端资料! bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个 ...

  4. Java在方法中定义可变参数类型

    学习目标: 掌握可变参数的应用 学习内容: 1.定义 在方法中传递数组有一种更简单的方式--方法的可变参数,其本质是一个语法糖,目的是让开发者写代码更简单. 2.语法 [修饰符] 返回值类型 方法名称 ...

  5. js判断json数据是否存在某字段的方法

    方式一 !("key" in obj) if("name" in json){//json就是数组,name是你要找的值 console.log("有 ...

  6. 在 M1 Mac 上开发 .NET MAUI (iOS)

    在 M1 Mac 上开始使用 .NET MAUI 开发 (iOS) 的最简单方法. .NET 多平台应用程序 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动 ...

  7. 文档声明(Doctype)和<!Doctype html>有何作用? 严格模式与混杂模式如何区分?它们有何意义?

    文档声明的作用: 文档声明是为了告诉浏览器,当前HTML文档使用什么版本的HTML来写的,这样浏览器才能按照声明的版本来正确的解析. <!doctype html> 的作用就是让浏览器进入 ...

  8. 日志、第三方模块(openpyxl模块)

    目录 1.日志模块 2.第三方模块 内容 日志模块 1.日志模块的主要组成部分 1.logger对象:产生日志 无包装的产品 import logging logger = logging.getLo ...

  9. 日常使用mobx的小技巧

    日常使用mobx的小技巧 由于自己开发的项目都是中小型项目,所以在技术选型上使用了mobx.但是使用过程中发现关于mobx的技术文章并不多.于是萌发出写这篇文章的想法.请轻喷. 更新控制store渲染 ...

  10. shell基础知识讲解

    第1章 shell基础 1.1 什么叫做shell编程 shell编程也叫做bash高级编程语法 1.2 常见的shell命令解释器 bash            redhat和centos使用 d ...