昨日回顾

re
正则表达式
匹配字符串
场景 例如:爬虫,密码规则验证,邮箱地址验证,手机号码 学习re主要学习的就是 那一堆特殊符号 hashlib
hash是一种算法 lib表示库
该模块包含了一堆的hash算法
hash接受任意长度的输入,计算后,输出一段固定长度的字符串
根据算法的不同结果的长度也不同
在算法固定的情况下,输入的数据相同,输出的结果也必然相同
hash的两个作用:
1.加密 无法被反解
2.文件校验 比对两个文件是否完全相同

常用模块

1.logging *****

翻译为日志记录
该模块用于记录日志的 1.日志是什么?
日志其实就是日记,用于记录某个时间点发生了什么事 2.为什么要记录日志?
是为了日后来复查,提取有用的信息 3.如何来记录日志?
可以直接打开文件,往里写东西 直接写入文件的两个问题:
1.你写的数据格式,别人看不懂
2.解析数据麻烦 因此logging就诞生了
logging 专门用于记录日志 日志的级别
1.debug (最底层) 调试信息(用于记录程序在开发过程中的调试记录,例如,不清楚这个变量的值,所以打印一下)
2.info 记录普通信息(没特别的意义,就是简单的记录)
3.warning 警告信息(当某些操作可能发生错误,就记录为警告信息,涉及一些安全操作时,例如删库)
4,error 错误信息(当程序遇到错误时,列入要求用户输入一个整数,他偏要输入小数,导致数据类型转换失败)
5.critical 严重错误(当程序遇到问题,无法继续执行时,例如,需要一个核心组件,然而这个组件被用户删了)
为什么分级:随着时间的推移,你的日志会越来越多,成千上万条,这时候要提取有用的信息就很慢,所有使用logging,这样一来,在查看日志的时候,可以快速的定位到想要的日志 为什么要设置最低等级,因为一些级别的日志对我是无用的 如果我们需要更详细的去定制logging的各项功能,就需要我们系统的学习一下logging这个模块
四种核心角色
1.Logger 日志生成器:负责产生一条完整的日志
2.Filter 过滤器:负责对日志进行过滤
3.Handle 处理器:负责将日志输出到指定位置
4.Formater 格式化:负责处理日志显示的格式
一条日志的生命周期
1.由Logger产生日志
2.交给过滤器进行过滤
3.交给Hanlder按照Formater的格式进行输出
这三步都可以 对日志进行筛选,什么样的需要显示,什么样的不需要显示 使用方法 import logging # 简单的使用
logging.debug('这是一条日志信息') # 没有输出任何内容
因为logging模块为日志划分了级别,由于你输出的级别没有达到最低级别,所有没有输出
logging.info()
logging.debug()
logging.warnning()
logging.error()
logging.critical()
最低等级是warnning
logging用数字来表示级别 从低到高 0 10 20 30 40 50
#默认情况下,级别为warnning,输出的位置是控制台,默认的日志格式为 级别:日志生成器的名称:调试的信息 如何修改默认的行为
logging.basicConfig(filename="mylog.txt", # 指定的日志文件名
filemode="a", #指定的是文件打开的模式 通常为a
level=logging.DEBUG, # 指定级别
format="%(filename)s %(levelname)s %(asctime)s %(message)s",# 指定显示格式
) 需求:有一个登录注册 功能 需要记录用户操作日志,程序员需要看到最详细的信息,而boss只需要看到简单信息 #自定义四种核心觉得,完成日志的输出
#参数指定的生成器的名称(因为可以同时存在多个生成器,需要名字来加以区分)
mylog = logging.getLogger('mylog')
#设置生成器的级别,低于该级别的不会生成
mylog.setLevel(10)
# 过滤器 这里不讲 需要使用面向对象的基础知识点(不常用)
# 给程序员看的日志处理器
handler1 = logging.FileHandler("youlog.txt",encoding="utf8",)
#将处理器 绑定给生成器, add函数表明了 一个生成器可以添加多个处理器
mylog.addHandler(handler1) # 给老板看的日志处理器
handler2 = logging.FileHandler("boss.txt",encoding="utf8",)
#将处理器 绑定给生成器, add函数表明了 一个生成器可以添加多个处理器
mylog.addHandler(handler2) # 格式化处理器 # 程序员的格式化处理器
formater1= logging.Formatter(fmt="%(threadName)s %(funcName)s %(module)s %(filename)s %(levelname)s %(asctime)s %(message)s")
# 将格式化处理器 绑定给 handler
handler1.setFormatter(formater1) # 老板的格式化处理器
formater2= logging.Formatter(fmt="%(levelname)s %(asctime)s %(message)s")
# 将格式化处理器 绑定给 handler
handler2.setFormatter(formater2) 现在需求已经实现了,但是每次使用日志都要写这么一堆代码,最好把配置写死,直接复制已有的配置信息
# logging.config 专门用于配置logging模块
import logging.config
#导入包含配置字典的模块
import loggin_config
#通过一个字典来配置logging模块
logging.config.dictConfig(loggin_config.LOGGING_DIC) 通过名称来获取一个生成器
aaloger = logging.getLogger('aa')
aaloger.info('测试信息') 当要获取的名称不存在时,会返回一个默认的生成器
aaloger = logging.getLogger('asadafasd') print(aaloger.name) 字典配置(重点)
字典的 内容重点,但是不需要背,
需要记住的是 如何来加载配置
                  '[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字

simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'

id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'

logfile_path = "dictconfig.log"

LOGGING_DIC = {
'version': 1,
# 是否禁用已存在的生成器 这个值保持为False
'disable_existing_loggers': False,
# 四个key不能随便写 是固定
'formatters': {
# standard 表示格式化处理器的名字 相当于变量名称 可以随便写
'standard': {
# format是固定的不能随便写
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {},
'handlers': {
#打印到终端的日志
#console是处理器的名称 可以随便写
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'simple'
},
#打印到文件的日志,收集info及以上的日志
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': logfile_path, # 日志文件
'maxBytes': 1024*1024*5, # 日志大小 5M
'backupCount': 5, #日志文件最大个数
'encoding': 'utf-8', # 日志文件的编码
},
"ATM":{
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': "ATMlog.txt", # 日志文件
'maxBytes': 1024*1024*5, # 日志大小 5M
'backupCount': 5, #日志文件最大个数
'encoding': 'utf-8', # 日志文件的编码
}
},
'loggers': {
#logging.getLogger(__name__)拿到的logger配置
#aa是生成器的名称 可以随便写
# 如果将key(生成器名称)设置为空 则意味着将它作为默认的是你生成器
'': {
'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'level': 'DEBUG',
'propagate': True, # 向上(更高level的logger)传递 日志的继承
},
"atm":{
'handlers': ['ATM'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'level': 'DEBUG',
'propagate': True, # 向上(更高level的logger)传递 日志的继承
}
},
}``` # 了解知识点 # 自己来定义四种核心角色 import logging
mylog = logging.getLogger("father")
mylog.setLevel(10) handler = logging.FileHandler("father.log")
mylog.addHandler(handler)
handler.setLevel(10) fmter = logging.Formatter(fmt="%(threadName)s %(funcName)s %(module)s %(filename)s %(levelname)s %(asctime)s %(message)s")
handler.setFormatter(fmter) # 在获取一个生成器 同时指定该生成器的父生成器是father这个生成器
sonlog = logging.getLogger("father.son") # 需求:子生成器 的输出位置与父生成器不同 格式相同
sonhandler = logging.FileHandler("son.txt",encoding="utf8")
sonlog.addHandler(sonhandler) sonfmt = logging.Formatter(fmt="%(threadName)s %(funcName)s %(module)s %(filename)s %(levelname)s %(asctime)s %(message)s")
sonhandler.setFormatter(sonfmt) # 继承后子生成器 可以直接使用父生成器的配置 # mylog.info("这是一条日志信息!")
# sonlog.info("这是 son 输出的日志信息!") #子生成器 在生成一个日志时 会自动给父生成器也发一个 # 取消传递效果
sonlog.propagate = False sonlog.info("这是 son 输出的日志信息!") 学习logging模块,是为了更方便的记录日志,不用再自己解决日志记录的问题 #### 2.sys模块 ***
是system的缩写,表示系统,指的是python的解释器
import sys
# 用于操作系统调用解释器时传入的参数
print(sys.argv) 当前文件路径,是解释器的第一个参数
给多个参数,用空格隔开 #当你要开发一款基于cmd的程序时,就需要使用这个属性了,因为一些操作系统没有界面,只能通过cmd来使用 #需求 开发一个基于cmd的复制文件的工具
第一个参数表示被执行的py文件,第二个作为源文件路径,第三个作为目标文件的路径
source_path = sys.argv[1]
target_path = sys.argv[2] sys.exit(0) 表示正常退出 总结 sys]处理与python解释器相关的一些操作
添加环境变量 sys.path
获取调用解释器的参数 sys.argv #### 3.shevlem模块***
用于序列化的模块:json,pickle import shelve
shelve.open('test.she')
s.['name'] = 'egon'
s['dic'] = {'age':20} s = shelve.open('test.she')
print(s['name']) #shelve 模块只有一个函数,就是open用于打开一个文件,
打开以后,操作方式与字典完全一致,你可以把它当成字典,并且是自带buff的字典,可以字典给完成序列化
同样支持 python所有的基础数据类型
该模块序列化得到的数据,只能被该模块使用,其他语言没有这个模块,所以无法使用,即无法跨平台,当你写的程序是一个单机程序时,可以考虑
后期,只要涉及到数据交换,就应该使用json

day18 logging模块 sys shelve的更多相关文章

  1. logging模块、sys模块、shelve模块

    一.logging模块 1.logging模块就是用于记录日志的,日志就是记录某个时间点,发生的事情. 2.记录日志是为了日后来复查,提取有用的信息. 3.如何去记录日志:可以直接打开文件,记录信息, ...

  2. shelve模块,sys模块,logging模块

    1.shelve模块 用于序列化的模块,shelve模块比pickle模块简单,只有open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型. impor ...

  3. python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

    python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess ...

  4. Python基础(12)_python模块之sys模块、logging模块、序列化json模块、pickle模块、shelve模块

    5.sys模块 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 ...

  5. Python日志(logging)模块,shelve,sys模块

    菜鸟学python第十七天 1.logging 模块 logging模块即日志记录模块 用途:用来记录日志 为什么要记录日志: 为了日后复查,提取有用信息 如何记录文件 直接打开文件,往里写东西 直接 ...

  6. python基础——14(shelve/shutil/random/logging模块/标准流)

    一.标准流 1.1.标准输入流 res = sys.stdin.read(3) 可以设置读取的字节数 print(res) res = sys.stdin.readline() print(res) ...

  7. s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译

    时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...

  8. 20181207(sys,shelve,logging)

    一.logging模块 logging专门用来记录日志 日志的级别分为五级,可以用数字表示,从低到高分别为: import  logginglogging.info('info')   #10logg ...

  9. Python--模块之sys模块、logging模块、序列化json模块、序列化pickle模块

    sys模块 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit() sys.path 返回模块的搜索路径,初始化时使用PYTHONPA ...

随机推荐

  1. Maintenance Planner calculate SPs by manual

    note Are you unable to view your system or updated system information? Apply the latest version of t ...

  2. 11.纯 CSS 创作一个荧光脉冲 loader 特效

    原文地址:https://segmentfault.com/a/1190000014700727 HTML代码: <html> <head> <link rel=&quo ...

  3. python中的keys、values、items

    keys()获取字典中所有的键并放入列表 values()获取字典中所有的值并放入列表 items()获取字典中所有的键值对并放入列表 举个例子: 1 a = { 2 "name" ...

  4. Objective-C中Block的常见用法

    typedef int(^AddValue)(int,int); int main(int argc, const char * argv[]) { @autoreleasepool { //1:NS ...

  5. 12. myeclipse遇到Initializing java tooling(1%)终极解决办法

    问题描述: 打开myeclipse,发现myeclipse宕掉了,并且出现这样的提示:关于Initializing java tooling(1%)... 解决方案: 找到eclipse目录,编辑ec ...

  6. 使用Shiro登录成功后,跳转到之前访问的页面实现

    转:http://blog.csdn.net/lhacker/article/details/20450855 很多时候,我们需要做到,当用户登录成功后,跳转回登录前的页面.如果用户是点击" ...

  7. Spring cloud(2)B Eureka 注册微服务到服务中心

    1.在provide上添加pom(必须加上web)   如果不加 启动后就会自己关闭 <dependency> <groupId>org.springframework.clo ...

  8. 【JEECG技术文档】JEECG在线聊天插件功能集成文档

    原文地址:http://jeecg.iteye.com/blog/2320670 JEECG在线聊天插件功能集成文档 前提: 采用jeecg_3.6.3版本以上(Maven工程) 插件项目: 在线聊天 ...

  9. flash builder 4.7 打开闪退解决办法

    删除文件 /Users/apple/Documents/Adobe Flash Builder 4.7/.metadata/.plugins/org.eclipse.ui.workbench/work ...

  10. springmvc配置接口返回的数据是json

    首先要导入所需要的jar,使用maven方式管理jar包 <!-- 配置接口返回数据json --> <dependency> <groupId>com.faste ...