python-study-17

复习

上节课复习1、什么是模块模块是一系列功能的集合体2、为何用模块拿来(内置或第三方的模块)主义,提升开发效率自定义模块可以让程序的各部分组件重用模块内的功能3、如何用模块大前提:模块是被执行文件导入使用,模块的导入必须搞明白谁是执行文件,谁是被导入的模块import首次import m1导入模块都发生三件事:1、先创建一个模块的名称空间2、执行m1.py,将执行过程中产生的名称都放入模块的名称空间中3、在当前执行文件中拿到一个名字m1,该名字是指向模块的名称空间使用方法:指名道姓地访问m1名称空间中的名字func,优点是不会与当前名称空间中的名字冲突,缺点是每次访问都需要加上前缀m1.funcfrom ... import首次from m1 import func导入模块都发生三件事:1、先创建一个模块的名称空间2、执行m1.py,将执行过程中产生的名称都放入模块的名称空间中3、在当前执行文件中直接拿到一个功能名func,该名字是直接指向模块名称空间中的某一个功能的使用方法:直接使用功能即可,优点是无需加任何前缀,缺点是容易与当前名称空间中的名字冲突def func():passfunc()4、模块的搜索路径内存-》内置模块-》sys.path5、软件开发的目录规范今日内容1、模块的另外一种形式->包(****2、常用模块logging日志模块时间模块random模块json与pickle模块
View Code

 

1、什么是包包是模块的一种形式,包的本质就是一个含有__init__.py文件的文件夹2、为什么要有包3、如何用包导入包就是在导包下的__init__.pyimport ...from ... import...注意的问题:1、包内所有的文件都是被导入使用的,而不是被直接运行的2、包内部模块之间的导入可以使用绝对导入(以包的根目录为基准)与相对导入(以当前被导入的模块所在的目录为基准)推荐使用相对导入3、当文件是执行文件时,无法在该文件内用相对导入的语法只有在文件时被当作模块导入时,该文件内才能使用相对导入的语法4、凡是在导入时带点的,点的左边都必须是一个包import aaa.bbb.m3.f3 # 错误
View Code

 

日志模块

# import logging
# 进行基本的日志配置
# logging.basicConfig(filename='access.log',
#                     format='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',
#                     datefmt='%Y-%m-%d %H:%M:%S %p',
#                     level=10,
#                     # stream=True
#                     )# 日志级别遵循原则:自下而上进行匹配 #debug-》info-》warning-》error-》critical
# logging.debug('调试信息') #10
# logging.info('正常信息') #20
# logging.warning('不好啦着火啦') #30
# logging.error('报错信息') #40
# logging.critical('严重错误信息') #50# 问题:
#1、没有指定日志级别
#2、没有指定日志格式
#3、只能往屏幕打印,没有写入文件# 新问题
#1、不能指定字符串编码
#2、只能往文件中打印import logging
# logging模块包含四种角色:logger,filter,formatter,handler
#1、logger:负责产生日志信息
logger1=logging.getLogger('交易日志')
# logger2=logging.getLogger('用户相关')#2、filter:负责筛选日志#3、formatter:控制日志输出格式
formatter1=logging.Formatter(fmt='%(asctime)s:%(name)s:%(levelname)s:%(message)s',datefmt='%Y-%m-%d %X'
)
formatter2=logging.Formatter(fmt='%(asctime)s:%(message)s',datefmt='%Y-%m-%d %X'
)#4、handler:负责日志输出的目标
h1=logging.FileHandler(filename='a1.log',encoding='utf-8')
h2=logging.FileHandler(filename='a2.log',encoding='utf-8')
sm=logging.StreamHandler()#5、绑定logger对象与handler对象
logger1.addHandler(h1)
logger1.addHandler(h2)
logger1.addHandler(sm)#6、绑定handler对象与formatter对象
h1.setFormatter(formatter1)
h2.setFormatter(formatter1)
sm.setFormatter(formatter2)#7、设置日志级别:可以在两个关卡进行设置logger与handler
logger1.setLevel(10)
h1.setLevel(10)
h2.setLevel(10)
sm.setLevel(10)logger1.info('Egon借给李杰100W')
View Code
"""
logging配置
"""
import os
import logging.config# 定义三种日志输出格式 开始
standard_format = '%(asctime)s - %(filename)s:%(lineno)d - %(levelname)s - %(message)s'simple_format = '%(asctime)s - %(levelname)s - %(message)s'id_simple_format = '[%(asctime)s] %(message)s'# log文件的全路径
logfile1_path = r'D:\SH_fullstack_s2\day17\a1.log'
logfile2_path = r'D:\SH_fullstack_s2\day17\a2.log'# log配置字典
LOGGING_DIC = {'version': 1,'disable_existing_loggers': False,'formatters': {'formatter1': {'format': standard_format},'formatter2': {'format': simple_format},},'filters': {},'handlers': {#打印到终端的日志'sm': {'level': 'DEBUG','class': 'logging.StreamHandler',  # 打印到屏幕'formatter': 'formatter2'},#打印到文件的日志,收集info及以上的日志'h1': {'level': 'DEBUG','class': 'logging.FileHandler',  # 保存到文件'formatter': 'formatter1','filename': logfile1_path,  # 日志文件'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
        },'h2': {'level': 'DEBUG','class': 'logging.FileHandler',  # 保存到文件'formatter': 'formatter1','filename': logfile2_path,  # 日志文件'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
        },},'loggers': {#logging.getLogger(__name__)拿到的logger配置'logger1': {'handlers': ['h1','h2','sm'],'level': 'DEBUG','propagate': False,  # 向上(更高level的logger)传递
        },},
}
logging的用法

 

转载于:https://www.cnblogs.com/xujinjin18/p/9198956.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学成在线--5.CMS页面管理开发(修改页面)

文章目录1.修改页面流程1)前端逻辑2)后端逻辑2.修改页面接口定义3.后端开发--Dao4.后端开发--Service5.后端开发--Controller1)根据id查询页面2)保存页面信息6.前端开发--页面处理流程7.前端开发--编写page_edit.vue8.前端开发--配…

Map四种获取key和value值的方法,以及对map中的元素排序

2019独角兽企业重金招聘Python工程师标准>>> 获取map的值主要有四种方法,这四种方法又分为两类: 一类是调用map.keySet()方法来获取key和value的值, 另一类则是通过map.entrySet()方法来取值, 两者的区别在于,前者主要…

HTTP 协议(详解)

HTTP协议简介:HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(www.world wide web)服务器与本地浏览器之间传输文本的传输协议。 http请求协议与相应协议HTTP协议包含浏览器发送数据到服务器需要遵循…

React Native集成Redux框架讲解与应用

学过React Native的都知道,RN的UI是根据相应组件的state进行render的,而页面又是由大大小小的组件构成,导致每个组件都必须维护自身的一套状态,因此当页面复杂化的时候,管理state会相当吃力的。而redux提供了一套机制来…

学成在线--7.CMS页面管理开发(异常处理)

文章目录1.异常处理的问题分析2.异常处理流程3.可预知异常处理1.自定义异常类2.异常抛出类3.异常捕获类4.异常处理测试1)定义错误代码2)异常处理测试4.不可预知异常处理1.定义异常捕获方法1)异常抛出测试2)异常捕获方法1.异常处理…

Django(6)

为什么不用_set related_name和related_query_name的区别related_name将成为相关对象的属性,允许您使用外键对模型进行“倒退”。例如,如果ModelA有像下面这样的字段,那么model_b ForeignKeyField(ModelB, related_namemodel_as)这将使您能够…

P5 RV1126编码测试Demo

目录 前言 01 测试Demo大致流程图 02 代码分析 2.1 VI设备初始化 2.2 使能通道 —— RK_MPI_VI_EnableChn 2.3 VI 和 VENC绑定 2.4 创建 编码线程 前言 从本章开始我们将要学习嵌入式音视频的学习了 ,使用的瑞芯微的开发板 🎬 个人主页&#xff1a…

MP算法和OMP算法及其思想

主要介绍MP(Matching Pursuits)算法和OMP(Orthogonal Matching Pursuit)算法[1],这两个算法虽然在90年代初就提出来了,但作为经典的算法,国内文献(可能有我没有搜索到)都仅描述了算法步骤和简单的应用,并未对其进行详尽的分析&…

SpringMVC详细示例实战教程

一、SpringMVC基础入门&#xff0c;创建一个HelloWorld程序 1.首先&#xff0c;导入SpringMVC需要的jar包。 2.添加Web.xml配置文件中关于SpringMVC的配置 123456789101112131415<!--configure the setting of springmvcDispatcherServlet and configure the mapping-->&…

学成在线--8.Freemarker入门教程

文章目录1.FreeMarker介绍1&#xff09;常用的java模板引擎还有哪些&#xff1f;2&#xff09;freemarker是一个用Java开发的模板引擎3&#xff09;模板数据模型输出2.FreeMarker快速入门1&#xff09;创建测试工程2&#xff09;配置文件3&#xff09;创建模型类4&#xff09;创…

if...elif...else...fi和case...esac的脚本条件判断式

注意1&#xff1a; if 表达式和case 表达式的区别及什么时候使用哪个要有明确的区分&#xff1f; 『 if .... then .... fi 』对于变量的判断是以『比对』的方式来分辨的&#xff0c; 如果符合状态就进行某些行为&#xff0c;并且透过较多层次 (就是elif ) 的方式来进行多个变量…

安卓自定义View进阶-分类与流程

自定义View绘制流程函数调用链(简化版) 一.自定义View分类 我将自定义View分为了两类(sloop个人分类法&#xff0c;非官方)&#xff1a; 1.自定义ViewGroup 自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成新的组件&#xff0c;大多继承自ViewGroup或各种Layout&…

【笔试记录】2021/3/13美团

2021/3/13美团笔试 1.旋转二维数组 m, n map(int, input().split()) a [] for _ in range(m):a.append(list(map(int, input().split()))) for j in range(n):for k in range(m):print(a[k][j], end )print(end\n)输入输出 2.找出输入字符串中的所有数字 s input() n …

学成在线--9.页面静态化

文章目录一.页面静态化流程二.数据模型1.轮播图DataUrl接口1&#xff09;需求分析2&#xff09;接口定义3&#xff09;Dao4&#xff09;Service5&#xff09;Controller6&#xff09;测试2.远程请求接口1&#xff09;添加依赖2&#xff09;配置RestTemplate3&#xff09;测试Re…

数据库MySQL/mariadb知识点——日志记录(2)二进制日志

二进制日志 记录已提交事务导致数据改变或潜在导致数据改变的SQL语句&#xff0c;通过“重放”日志文件中的事件来生成数据副本&#xff0c;不依赖存储引擎类型。 开启二进制日志&#xff0c;默认是关闭的&#xff0c;二进制日志和数据分开存放 开启记录二进制文件的功能&#…

【面试记录】Python常见面试200题及答案总结

Python常见面试200题及答案总结 /待完善/ 1. 列出5个常用python标准库&#xff1f; os&#xff1a;提供了不少与操作系统相关联的函数&#xff0c;提供了一种可移植的使用操作系统功能的方法。使用os模块中提供的接口&#xff0c;可实现跨平台访问。但是&#xff0c;并不是所…

Linux负载均衡软件LVS之一(概念篇)

2019独角兽企业重金招聘Python工程师标准>>> 一、 LVS简介 LVS是Linux Virtual Server的简称&#xff0c;也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目&#xff0c;它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分…

学成在线--10.页面预览

文章目录一.需求分析二. 搭建环境1.在cms服务中集成freemarker&#xff1a;2.在application.yml配置freemarker三.Service四.Controller五.页面预览测试-- 配置Nginx代理六.页面预览测试-- 添加“页面预览”链接一.需求分析 页面在发布前增加页面预览的步骤&#xff0c;方便用…

【代码刷题】排序算法总结(python实现)

排序算法总结&#xff08;Python实现&#xff09;算法介绍算法分类相关概念1. 冒泡排序&#xff08;Bubble Sort&#xff09;1.1 思想1.2 python实现1.3 复杂度1.4 稳定性2. 快速排序&#xff08;Quick Sort&#xff09;2.1 思想&#xff08;伪代码&#xff09;2.2 python实现2…

学成在线--11.RabbitMQ快速入门

文章目录一.RabbitMQ简介二.相关知识1.AMQP2.JMS是什么 &#xff1f;三.RabbitMQ的工作原理四.Hello World1.创建Maven工程2.生产者3.消费者五.总结一.RabbitMQ简介 MQ全称为Message Queue&#xff0c;即消息队列&#xff0c; RabbitMQ是由erlang语言开发&#xff0c;基于AMQP…