2018-06-27-Python全栈开发day23-logging、configparser、hashlib模块

1.logging模块

  logging模块就是日志模块,用来记录程序运行的状态。

  其中有五个级别:

  •   debug,
  •   info,
  •   warning,
  •   error,
  •   critical

 

logging.debug(‘debug message‘)#
logging.info(‘info message‘)
logging.warning(‘warn message‘)#表明发生了一些意外,或者不久的将来会发生问题(如‘磁盘满了’)。软件还是在正常工作。
logging.error(‘error message‘)#由于更严重的问题,软件已不能执行一些功能了。
logging.critical(‘critical message‘)#严重错误,表明软件已不能继续运行了。

用来输出日志内容,自身可以对日志内容根据自己的需要进行定制
WARNING:root:warn message
ERROR:root:error message
CRITICAL:root:critical message#在输出的过程中,root为目前使用的用户

1.1 调整显示参数

参数名称    描述
filename    指定日志输出目标文件的文件名,指定该设置项后日志信心就不会被输出到控制台了
filemode    指定日志文件的打开模式,默认为‘a‘。需要注意的是,该选项要在filename指定时才有效
format    指定日志格式字符串,即指定日志输出时所包含的字段信息以及它们的顺序。logging模块定义的格式字段下面会列出。
datefmt    指定日期/时间格式。需要注意的是,该选项要在format中包含时间字段%(asctime)s时才有效
level    指定日志器的日志级别
stream    指定日志输出目标stream,如sys.stdout、sys.stderr以及网络stream。需要说明的是,stream和filename不能同时提供,否则会引发 ValueError异常
style    Python 3.2中新添加的配置项。指定format格式字符串的风格,可取值为‘%‘、‘{‘和‘$‘,默认为‘%‘
handlers    Python 3.3中新添加的配置项。该选项如果被指定,它应该是一个创建了多个Handler的可迭代对象,这些handler将会被添加到root logger。需要说明的是:filename、stream和handlers这三个配置项只能有一个存在,不能同时出现2个或3个,否则会引发ValueError异常。

   1.1 level----basicConfig

      

logging.basicConfig(filename=‘logger.log‘, level=logging.INFO)
#使用basicconfig方法,来对显示内容进行显示,如果有filename,则是将日志内容存到相应的文件中,否则是输出到屏幕上,
  #level是最低显示什么级别的信息,如果想过滤掉一些无伤大雅的信息,则可以使用info

  1.2format

    

import logging
logging.basicConfig(level=logging.DEBUG,format=‘%(asctime)s-%(levelname)s-%(message)s‘)
logging.debug(‘debug message‘)
logging.info(‘info message‘)
logging.warning(‘warn message‘)
logging.error(‘error message‘)
logging.critical(‘critical message‘)
2018-07-02 22:42:36,277-DEBUG-debug message
2018-07-02 22:42:36,544-INFO-info message
2018-07-02 22:42:36,544-WARNING-warn message
2018-07-02 22:42:36,544-ERROR-error message
2018-07-02 22:42:36,545-CRITICAL-critical message

format的格式是time-levelname-message

  1.3 logging的四大模块

     

组件名称    对应类名    功能描述
日志器    Logger    提供了应用程序可一直使用的接口
处理器    Handler    将logger创建的日志记录发送到合适的目的输出
过滤器    Filter    提供了更细粒度的控制工具来决定输出哪条日志记录,丢弃哪条日志记录
格式器    Formatter    决定日志记录的最终输出格式

  1.3.1 同时把日志打印到屏幕,并且写入文件

  

import logging

logger=logging.getLogger(‘abc.txt‘)
logger.setLevel(logging.DEBUG)#设置日志级别
fh=logging.FileHandler(‘abc.txt‘)#将日志输出到文件内
ch=logging.StreamHandler()#输出到屏幕
logger.addHandler(fh)#将方法加入到处理器中
logger.addHandler(ch)
fm=logging.Formatter(‘%(asctime)s-%(levelname)s-%(message)s‘)#设置输出格式
fh.setFormatter(fm)#应用格式
ch.setFormatter(fm)
logger.debug(‘debug message‘)
logger.info(‘info message‘)
logger.warning(‘warning message‘)
logger.error(‘error message‘)
logger.critical(‘critical message‘)
2018-07-03 00:05:53,601-DEBUG-debug message
2018-07-03 00:05:53,601-INFO-info message
2018-07-03 00:05:53,601-WARNING-warning message
2018-07-03 00:05:53,601-ERROR-error message
2018-07-03 00:05:53,601-CRITICAL-critical message

  1.3.2 有root且有子用户的时候

      root作为父进程,打印子用户的信息时,会同时打印父进程root的信息

2.configparser模块

  配置文件,是以字典的形式进行存储

  

import configparser
config = configparser.ConfigParser()     #config={}#相当于定义一个空字典
config["DEFAULT"] = {‘ServerAliveInterval‘: ‘45‘,
                     ‘Compression‘: ‘yes‘,
                     ‘CompressionLevel‘: ‘9‘}#对文件进行字典类型的写入

config[‘bitbucket.org‘] = {}
config[‘bitbucket.org‘][‘User‘] = ‘hg‘

config[‘topsecret.server.com‘] = {}
topsecret = config[‘topsecret.server.com‘]
topsecret[‘Host Port‘] = ‘50022‘  # mutates the parser
topsecret[‘ForwardX11‘] = ‘no‘  # same here

with open(‘example.ini‘, ‘w‘) as f:
    config.write(f)
[DEFAULT]
serveraliveinterval = 45
compression = yes
compressionlevel = 9

[bitbucket.org]
user = hg

[topsecret.server.com]
host port = 50022
forwardx11 = no

2.1 对配置文件进行查询

    2.1.1查看

        

import configparser
config=configparser.ConfigParser()

config.read(‘example.ini‘)
print(‘bitbucket.org‘ in config)
print(config[‘bitbucket.org‘][‘user‘])

  2.1.2 对文件的键进行遍历

  2.1.3 增加

    

import configparser
config=configparser.ConfigParser()

config.read(‘example.ini‘)
print(‘bitbucket.org‘ in config)
print(config[‘bitbucket.org‘][‘user‘])
config.add_section(‘haibin‘)
config.set(‘haibin‘,‘k1‘,‘value‘)
with open(‘example.ini‘, ‘w‘) as f:
    config.write(f)

  2.1.4 删除

    

import configparser
config=configparser.ConfigParser()

config.read(‘example.ini‘)
print(‘bitbucket.org‘ in config)
print(config[‘bitbucket.org‘][‘user‘])

config.remove_section(‘haibin‘)#删除整个块
config.remove_option(‘bitbucket.org‘,‘user‘)#删除块下面的key值
with open(‘example.ini‘, ‘w‘) as f:
    config.write(f)
    

3.hashlib模块

  进行加密处理的,所有的值都可以进行加密,并且得到一个相同长度的值

    可以对文件进行比对,然后查询是否是同一文件。

    用法

  

import hashlib
obj=hashlib.md5()#以md5的方式进行hash#  为了避免被破解,还可以在md5后面加上一个校验值,减少被破解的几率。#obj=hashlib.md5(‘sb‘,encode=‘utf8‘)
obj.update(‘brown‘.encode(‘utf-8‘))#使用update方法,开始进行hash,第一个参数是进行hash的值,第二个是编码方式
print(obj.hexdigest())#这个是对所更新的值进行输出
---
6ff47afa5dc7daa42cc705a03fca8a9b

   

原文地址:https://www.cnblogs.com/hai125698/p/9256581.html

时间: 2024-11-09 15:51:56

2018-06-27-Python全栈开发day23-logging、configparser、hashlib模块的相关文章

Python全栈开发【基础三】

Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 1 def 函数名(参数): 2 3 ... 4 函数体 5 ... 6 返回值 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函数名调用函数 函数体:函数中进行一系列的逻辑计算 参数:为函数体提供数据 返回值:当函数执行完毕后,可以给调用者返回数据. 总结使用函数的好处: 1.减少代码重用 2.保持一致性,易维护

Python全栈开发

Python全栈开发 一文让你彻底明白Python装饰器原理,从此面试工作再也不怕了. 一.装饰器 装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator),装饰器的功能非常强大,但是理解起来有些困难,因此我尽量用最简单的例子一步步的说明这个原理. 1.不带参数的装饰器 假设我定义了一个函数f,想要在不改变原来函数定义的情况下,在函数运行前打印出start,函数运行后打印出end,要实现这样一个功能该怎么实现?看下面如何用

Python全栈开发【基础二】

Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 编码与进制转换 Python 运算符 1.算术运算: 2.比较运算: 3.赋值运算: 4.逻辑运算:  5.成员运算: 基本数据类型 1.数字 int(整型) 1 class int(object): 2 """ 3 int(x=0) -> integer 4 int(x, base=10) -&g

Python全栈开发【基础四】

Python全栈开发[基础四] 本节内容: 匿名函数(lambda) 函数式编程(map,filter,reduce) 文件处理 匿名函数 lambda表达式:对于简单的函数,存在一种简便的表示方式,即lambda表达式 1 #这段代码 2 def calc(n): 3 return n**n 4 print(calc(10)) 5 6 #换成匿名函数 7 calc = lambda n:n**n 8 print(calc(10)) 匿名函数主要是和其它函数搭配使用 举例: 1 ########

Python全栈开发【第一篇】:初识Python

Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与while循环练习题 基本数据类型前引 Python 的种类 Cpython Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上. Jyhton Python的Java实现,Jython会将Pyth

python全栈开发目录

python全栈开发目录 linux命令 初识python python基础数据类型 函数编程.set.深浅拷贝 内置函数 文件操作 装饰器 迭代器和生成器 常用模块 初识类和对象 类和对象(进阶) 反射 异常处理 socket.IO多路复用 线程.进程.协程 HTML CSS JavaScript DOM文档操作 jQuery实例 web框架本质 Tornado mysql基础 mysql进阶 ..... 基本算法 递归--二分法查找 冒泡排序 更多 线程池

自学Python全栈开发第一次笔记

我已经跟着视频自学好几天Python全栈开发了,今天决定听老师的,开始写blog,听说大神都回来写blog来记录自己的成长. 我特别认真的跟着这个视频来学习,(他们开课前的保证书,我也写了一份,哈哈哈...)我现在是准大学生,准备学习编程,日后做一个程序员,哈哈哈.听说程序员很苦逼,不过貌似挣得也很多啊.并且我貌似也只喜欢计算机这个方面,所以我想在这个行业发光. 前些天学习了一些Linux一些命令: pwd     查看你当前所在的目录  /root=计算机/E盘 /    是根目录 cd(ch

Python 全栈开发:python列表List

列表 列表是python中经常使用的数据类型,用于存放多个值. 表现形式:在[ ]内用逗号分隔,可以存放n个任意类型的值 eg: #单一类型 users=['yangli','yite','fixd'] #多类型,列表嵌套 users=['room01',['yangli',20,'音乐'],['yite',20,'篮球'],] 列表常用方法 和 函数 方法 函数 常用的操作 eg: len(list) #len(list) 计算列表的长度 ls = ['a','b','c','d'] leng

Python 全栈开发:python元组tuple

元组 什么是元组:"元组就是一个不可变的列表" (并不是列表,只是为了便于记忆) 用途:用于存放多个值,只能读不能二次赋值 表现形式:小括号()中间以逗号分割各个元素 eg: tuples = ('a','b','c','d') 元组常用的操作 生成一个简单的元组 tuples = tuple(range(5)) print(tuples) #结果(0, 1, 2, 3, 4) len(tuple) #计算元组长度 tuples = (0, 1, 2, 3, 4) print(len(

python全栈开发-Day8 函数基础

python全栈开发-Day8 函数 一 .引子 1. 为何要用函数之不用函数的问题 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需要找出所有实现该功能的地方修改之,无法统一管理且维护难度极大  2. 函数是什么? 针对二中的问题,想象生活中的例子,修理工需要实现准备好工具箱里面放好锤子,扳手,钳子等工具,然后遇到锤钉子的场景,拿来锤子用就可以,而无需临时再制造一把锤子. 修理工===>程序员 具备某一功能的工具===>函数