菜鸟学Python第十七天

菜鸟学python第十七天

1.logging 模块

  • logging模块即日志记录模块
  • 用途:用来记录日志
  • 为什么要记录日志:

    为了日后复查,提取有用信息

  • 如何记录文件

    直接打开文件,往里写东西

    直接写入文件的两个问题:(logging模块解决这两个问题)

    1. 你写的数据格式 别人看不懂
    2. 解析数据模块
  • logging的使用
    • logging模块的两种记录日志的方式

      1. 使用logging提供的模块级别函数
      2. 使用logging日志系统四大组件

        <!--本质上logging模块级别函数日志记录就是对日志系统四大组件内容的封装-->

    • logging模块定义模块级别的常用函数级别:(从低到高,默认级别为warning,低于该级别的不打印)
      • debug : 最详细的日志信息,典型运用场景是问题诊断 \10
      • info : 记录普通信息,用于确认一切都是按照我预期的那样进行的 \20
      • warning : 警告信息(记录出错之前的提示信息及一些敏感操作) \30
      • error : 错误信息(记录程序遇到错误时的信息) \40
      • critical : 严重错误(当程序遇到问题 无法继续执行) \50
    • 分级的目的
      • 随着日志文件的增多,成千上万条,这时要提取有用的信息很慢,所以这样一来,在查看日志的时候,可以快速的定位筛选到想要的日志
    import logging
    ?
    logging.debug(‘这是第一条日志信息‘)
    logging.info(‘这是第一条日志信息‘)
    logging.warning(‘这是第一条日志信息‘)
    logging.error(‘这是第一条日志信息‘)
    logging.critical(‘这是第一条日志信息‘)
    ?
    输出结果:
    WARNING:root:这是第一条日志信息
    ERROR:root:这是第一条日志信息
    CRITICAL:root:这是第一条日志信息
    
    # 默认情况下,级别warning为输出的位置时控制台,默认的日志格式为 级别:日志级别:日志信息
     
    • 修改默认行为(logging.basicConfig()函数)

      该函数可以接收的关键字参数如下:

         
      参数名称 描述
      filename 指定输出文件的文件名,指定该信息后就不会被打印到控制台了
      filemode 指定输出文件的打开模式,默认为‘a‘,filename 指定时才有效
      level 指定日志器的日志级别
      format 指定日志格式字符串,即指定日志输出时所包含的字段信息及他们的顺序
      stream 指定日志输出的stream
    • logging模块中定义好的可以用于format格式字符串
字段/属性名称 使用格式 描述
asctime %(asctime)s 日志事件发生的时间--人类可读时间,如:2003-07-08 16:49:45,896
created %(created)f 日志事件发生的时间--时间戳,就是当时调用time.time()函数返回的值
relativeCreated %(relativeCreated)d 日志事件发生的时间相对于logging模块加载时间的相对毫秒数(目前还不知道干嘛用的)
msecs %(msecs)d 日志事件发生事件的毫秒部分
levelname %(levelname)s 该日志记录的文字形式的日志级别(‘DEBUG‘, ‘INFO‘, ‘WARNING‘, ‘ERROR‘, ‘CRITICAL‘)
levelno %(levelno)s 该日志记录的数字形式的日志级别(10, 20, 30, 40, 50)
name %(name)s 所使用的日志器名称,默认是‘root‘,因为默认使用的是 rootLogger
message %(message)s 日志记录的文本内容,通过 msg % args计算得到的
pathname %(pathname)s 调用日志记录函数的源码文件的全路径
filename %(filename)s pathname的文件名部分,包含文件后缀
module %(module)s filename的名称部分,不包含后缀
lineno %(lineno)d 调用日志记录函数的源代码所在的行号
funcName %(funcName)s 调用日志记录函数的函数名
process %(process)d 进程ID
processName %(processName)s 进程名称,Python 3.1新增
thread %(thread)d 线程ID
threadName %(thread)s 线程名称
import logging

logging.basicConfig(filename=‘mylog.txt‘,  # 指定的日志文件名
                      filemode=‘a‘,  # 指定的是稳健的打开模式 通常为a
                      level=logging.DEBUG,  # 指定级别
                      format=‘%(filename)s %(levelname)s %(asctime)s                       %(message)s %(pathname)s‘)  # 指定显示格式

logging.debug(‘这是一条日志信息‘)
logging.info(‘这是一条日志信息‘)
logging.warning(‘这是一条日志信息‘)
logging.error(‘这是一条日志信息‘)
logging.critical(‘这是一条日志信息‘)

# 输出结果(mylog.txt)
#loging_test.py DEBUG 2018-12-07 19:44:25,417 这是一条日志信息 C:/Users/liusijun/PycharmProjects/loging_test.py
#loging_test.py INFO 2018-12-07 19:44:25,458 这是一条日志信息 C:/Users/liusijun/PycharmProjects/loging_test.py
#loging_test.py WARNING 2018-12-07 19:44:25,459 这是一条日志信息 C:/Users/liusijun/PycharmProjects/loging_test.py
#loging_test.py ERROR 2018-12-07 19:44:25,459 这是一条日志信息 C:/Users/liusijun/PycharmProjects/loging_test.py
#loging_test.py CRITICAL 2018-12-07 19:44:25,459 这是一条日志信息 C:/Users/liusijun/PycharmProjects/loging_test.py
  
  • 日志的四大核心组件

    <!--logging模块提供的模块级别的那些函数实际上也是通过这几个组件的相关类来记录日志的,只是在创建这些类时设置了一些默认值-->

    1. Loggers 日志的生成器 负责产生一条完整的日志
    2. Filter过滤器 负责对日志进行过滤
    3. Handler处理器 负责将日志输出到指定位置
    4. Formatter格式化 负责处理日志显示的格式
  • 一条日志的生命周期

    1. 由Loger产生日志
    2. 交给filter过滤器进行过滤
    3. 交给Handler按照Formater的格式进行输出
import logging
?
# logger产生日志
a = logging.getLogger()
# 设置日志级别
a.setLevel(10)
# filter  pass
?
# handler 控制日志输入到文件或终端
fh1 = logging.FileHandler(filename=‘a.log‘, encoding=‘utf-8‘)  # 输出到文件
fh2 = logging.FileHandler(filename=‘b.log‘, encoding=‘utf-8‘)  # 输出到文件
fh3 = logging.StreamHandler()  # 输出到终端
fh1.setLevel(10)
fh2.setLevel(10)
fh3.setLevel(10)
?
# Formatter  控制日志输出格式
formatter1 = logging.Formatter(fmt=‘%(asctime)s %(module)s %(levelname)s %(message)s‘)
formatter2 = logging.Formatter(fmt="%(asctime)s %(module)s %(message)s",)
?
# logger绑定handler
a.addHandler(fh1)
a.addHandler(fh2)
a.addHandler(fh3)
?
# handle 绑定 Formatter
fh1.setFormatter(formatter1)
fh2.setFormatter(formatter2)
fh3.setFormatter(formatter2)
?
?
# 写日志
a.info(‘你好啊 !‘)
a.warning(‘你好啊 !‘)
a.debug(‘你好啊 !‘)
a.error(‘你好啊 !‘)
a.critical(‘你好啊 !‘)
  • 通过字典导入配置


2.shelve模块

shelve模也是一个序列化的模块

仅有一个函数,open用于打开一个文件

打开以后,操作方式与字典完全一致,你可以把它当做字典,而且自带buff的字典,可以给字典完成序列化。

同样支持python所有的基础数据类型

该模块不支持跨平台,序列化得到的数据,只能被该模块使用。

import shelve
?
# 序列化
?
a = {‘name‘: ‘jason‘, ‘age‘: ‘23‘, ‘weight‘: ‘75‘}
b = {‘name‘: ‘james‘, ‘age‘: ‘34‘, ‘weight‘: ‘100‘}
?
d = shelve.open(‘ds.shv‘)
d[‘jason‘] = a
d[‘james‘] = b
d.close()
?
运行结果:产生一个文件(不同系统有差异)
?
# 反序列化
d = shelve.open(‘ds.shv‘)
print(d[‘jason‘])
print(d[‘james‘])
d.close()
?
运行结果:
{‘name‘: ‘jason‘, ‘age‘: ‘23‘, ‘weight‘: ‘75‘}
{‘name‘: ‘james‘, ‘age‘: ‘34‘, ‘weight‘: ‘100‘}
?
?
# 如果想改文件里面的内容,则需要更改shelve默认形参writeback
?
d = shelve.open(‘ds.shv‘, writeback=True)
d[‘jason‘][‘age‘] = 18
print(d[‘jason‘])
?
运行结果:
{‘name‘: ‘jason‘, ‘age‘: 18, ‘weight‘: ‘75‘}
?

3.sys 模块

  • sys模块:全称system,指的是解释器(os指的是操作系统)
  • 常用操作,用于接收系统操作系统调用解释器传入的参数
# 1 sys.argv           命令行参数List,第一个元素是程序本身路径
print(sys.argv)
# 2 sys.exit(n)        退出程序,正常退出时exit(0)
print(sys.exit(1))
# 3 sys.version        获取Python解释程序的版本信息
print(sys.version)
# 4 sys.maxint         最大的Int值
print(sys.maxsize)
# 5 sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
print(sys.path)
# 6 sys.platform       返回操作系统平台名称
print(sys.platform)

原文地址:https://www.cnblogs.com/liusijun113/p/10088943.html

时间: 2024-08-01 17:02:18

菜鸟学Python第十七天的相关文章

菜鸟学python第二十七天(网络协议)

网络协议 网络通信的基本要素 物理介质 网络协议 OSI七层模型 OSI五层 应用层 传输层 : TCP/UDP协议,传输层为每个需要联网的应用程序绑定了一个私人端口号(一个整数,最大65585) 注意:0-1024是系统保留的端口,不要使用已经占用的端口(apache:8080,MySQL:3306,FTP:21) 网络层 : IP协议,子网掩码,IP与子网掩码进行AND运算,产生网络地址, 如果网络地址一致,则表明在同一个子网络(局域网). IP协议包含路由协议,帮助找到局域网的网关. 数据

菜鸟学python(11)list列表基本操作

想写点东西把自己学习python的过程记录下来,于是就有了菜鸟学python... list列表是在编写程序中经常用到,是用来处理一组有序项目的数据结构. 比如说range(1,5)其实就是个整数列表 所以 for x in range(1,5) 可以写成 for x in [1,2,3,4] 下面是一些列表的常见基本操作 首先创建一个空列表list list = [] 用append向这个列表里面添加一个值 list.append(1) #向list里面添加1 可以通过extend向list中

菜鸟学Python训练营第一期练习题

菜鸟学Python训练营第一期练习题 1.比如自然数10以下能被3或者5整除的有,3,5,6和9,那么这些数字的和为23. 求能被3或者5整除的1000以内数字的和 1 multiple_of_threes=[] 2 for multiple_of_three in range(0,1001,3): 3 multiple_of_threes.append(multiple_of_three) 4 sum_of_threes=sum(multiple_of_threes) 5 print(mult

菜鸟学python之类和对象

我们把一类相同的事物叫做类,其中相同事物相同的属性可以抽象出来,而一些相同的动作行为,也可以抽象成方法. 比如,汽车是一个类,它包括价格.品牌等属性.那么我们需要打印某一辆车的价格和品牌,只需要使用一句代码 print "the car's type 'ford',price:280000",但是当我们需要对一百个品种的车打印这句话的时候,怎么办呢? 这个问题我们通过以前学过的函数式编程就可以实现啦!我们只需要写一个类,然后将不同的车品牌和价格以参数的方式传到类里就好了.这样大大的提高

菜鸟学python之对象类型及运算

Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型. 等号(=)用来给变量赋值. 1 变量赋值 1.1 单个变量赋值 >>> name="python" >>> print(name) python 1.2 多个变量赋值 >>> name=names="python&

菜鸟学Python Day1.4(导入模块Import、用户交互Raw_input)

导入模块      1.什么是模块? 2.导入模块 Import moduleName   (自带200多个模块,第三方模块上千) Python标准库 如下:导入模块os.system内的的df,查看内存 查看模块os可以导入很多方法os. tab健: 如何加tab健: /usr/lib/python2.7/dist-packages/tab.py   默认第三方库存放位置 Python寻找路径规则: 如果查询不到就会报错, 如何让某一个模块在python任何一个地方都可以导入: ①在sys.p

菜鸟学python之dict

存储位置=hash(键) 在搜索时,首先对键进行hash运算,把求得的值当做"键-值对"的存储位置,在结构中按照此位置取"键-值对"进行比较,若键相等,则表示搜索成功.在存储"键-值对"的时候,依照相同的hash函数计算存储位置,并按此位置存放,这种方法就叫做哈希方法,也叫做散列方法.在哈希方法中使用的转换函数hash被称作哈希函数(或者散列函数).按照此中算法构造出来的表叫做哈希表(或者散列表). 哈希函数建立了从"键-值对"

菜鸟学Python第一天(安装,2.x与3.x区别)

Python2.x与3.x版本区别 Python的3.0版本,常被称为Python 3000,或简称Py3k.相对于Python的早期版本,这是一个较大的升级. 为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容. 许多针对早期Python版本设计的程式都无法在Python 3.0上正常执行. 为了照顾现有程式,Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移,允许使用部分Python 3.0的语法与函数.

菜鸟学Python第一天(安装,编程风格)

Python安装 获取Python 1.官网:www.python.org 2.任何一台Linux系统上(推荐,几乎所有的Linux用户已经在安装系统的时候默认安装了Python) 3.PythonXY(交互器比较全),portable python(绿色版本) a.对于Linux系统,很可能你已经在你的系统里安装了Python.否则,你可以通过你的发行版附带的包管理软件安装Python. b.对于Windows系统,安装Python就是下载安装程序然后双击它那么简单. 查看版本:python