包 

包是什么

    他是一系列文件的结合体,表现形式就是文件夹

    包的本质还是模块

  

    他通常会有__init__.py文件

  

  我们首先回顾一下模块导入的过程

import module
首次导入模块(.py文件)
先产生一个执行文件的名称空间
  1. 创建模块文件的名称空间
  2. 执行模块中的代码,将产生的名字和值传入模块的名称空间
  3. 在执行文件中拿到一个指向模块的名称空间的名字

  作为比较,包的导入过程是这样的

import package
首次导入包:
先产生一个执行文件的名称空间
  1.创建包下面的__init__.py文件的名称空间
  2.执行包下面的__init__.py文件中的代码 将产生的名字放入包下面的__init__.py文件名称空间中
  3.在执行文件中拿到一个指向包下面的__init__.py文件名称空间的名字

  需要注意的是“.”的左边一定是包(文件夹)

  使用包的注意事项?  

  从包的设计者的角度看,为了避免重名,可以使用相对导入
  从包的开发者的角度看,如果使用绝对路径来管理的自己的模块,那么它只需要永远以包的路径为基准依次导入模块。
  从包的使用者的角度看,你必须得将包所在的那个文件夹路径添加到system path中(环境变量)

    python2和python3的区别

  python2如果要导入包 包下面必须要有__init__.py文件
    
  python3如果要导入包 包下面没有__init__.py文件也不会报错
    当你在删程序不必要的文件的时候 千万不要随意删除__init__.py文件

  导入包的过程详解

  首先,这是组织结构,poke.py以及图中的init.py都是在dir文件夹下的哦

  

  其次,这是run.py/__init__.py/poke.py里面写的内容

  

  

  

  最后,这是执行结果

  

 from dir.poke import m0
m0() >>>
from __init__.py # 这是执行第一行代码得到的,
# 因为在dir文件夹下面的__init__.py文件中有
# print('from __init__.py')这句话
from dir文件夹下的poke.py里面定义的m0方法
           # 这是执行第二行代码m0()所得
           # 需要注意的是在引入m0方法时
           # 要注意不能直接写from dir import m0
           # 要写from dir.poke import m0,要把路径写全了

logging模块

日志记录示例

  下述版本存在以下问题:不能指定字符编码;只能往文件中打印。

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', # 日期的格式设置,如前一天介绍的,Y为年,m为月...,p为上午或者下午
level=30, # 这里给level传入的数值,决定了什么级别的日志会打印,这里写30就是指级别大于等于30的会打印
) logging.debug('debug日志') #
logging.info('info日志') #
logging.warning('warning日志') #
logging.error('error日志') # 40
logging.critical('critical日志') # 50
>>>
2019-07-19 18:58:01 PM - root - WARNING -logging模块:  warning日志
2019-07-19 18:58:01 PM - root - ERROR -logging模块: error日志
2019-07-19 18:58:01 PM - root - CRITICAL -logging模块: critical日志 

  日志模块需要记住的四个对象  

    1.logger对象:负责产生日志

    2.filter对象:过滤日志(了解)

    3.handler对象:控制日志输出的位置(文件/终端)

    4.formmater对象:规定日志内容的格式

logger对象

'''
注意程序执行结束多出来的两个文件(a1.log, a2.log)的内容与控制台的内容
'''
import logging # 1.logger对象:负责产生日志
logger = logging.getLogger('日志记录')

  从上面案例中可以得知,改变日志格式的要点就是 formatter对象,那么他有哪些格式的参数呢?

'''
format参数中可能用到的格式化串:
%(name)s Logger的名字
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID。可能没有
%(message)s用户输出的消息
'''

formatter对象的参数

filter对象(了解)

  这里没有用到,暂时不写,只要知道这是日志过滤相关的就可以了。

handler对象

# 3.handler对象:控制日志输出的位置(文件/终端)
hd1 = logging.FileHandler('a1.log', encoding='utf-8') # 输出到文件中,传入第二个参数 encoding='utf-8' 防止中文乱码
hd2 = logging.FileHandler('a2.log', encoding='utf-8')
hd3 = logging.StreamHandler() # 输出到终端=

formmater对象

# 4.formatter对象:规定日志内容的格式
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',
)

  # 以上从logger开始三部分代码(没有filter相关)加上下述代码,

    组合起来便能达到“在控制台,日志文件中分别打印日志”的需求

# 5.给logger对象绑定handler对象(绑定不同的输出文件、终端)
logger.addHandler(hd1)
logger.addHandler(hd2)
logger.addHandler(hd3) # 6.给handler绑定formatter对象 (给他们绑定不同的日志格式)
hd1.setFormatter(fm1)
hd2.setFormatter(fm2)
hd3.setFormatter(fm1) # 7.设置日志等级(debug、info、warning、err、critical),低于这个等级的信息将被过滤(舍弃)
logger.setLevel(20) # info # 8.记录日志
logger.debug('debug日志信息')
logger.info('info日志信息')
logger.error('error日志信息') # -------------* 控制台输出信息 *--------------------
# 2019-07-19 21:52:15 PM - 日志记录 - INFO -test2: info日志信息
# 2019-07-19 21:52:15 PM - 日志记录 - ERROR -test2: error日志信息 在控制台、日志文件中分别打印日志

logging配置字典

7.19 包 logging模块 hashlib模块 openpyxl模块 深浅拷贝的更多相关文章

  1. python基础--包、logging、hashlib、openpyxl、深浅拷贝

    包:它是一系列模块文件的结合体,表现形式就是一个文件夹,该文件夹内部通常会有一个__init__.py文件,包的本质还是一个模块. 首次导入包:(在导入语句中中 . 号的左边肯定是一个包(文件夹)) ...

  2. 19.包 logging 的使用

    包 什么是包: ---文件夹下具有__init__.py文件就是一个包 推荐使用 from . import 包的导入; from ss.bake.api.policy import func --- ...

  3. 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时间 ...

  4. logging、hashlib、collections模块

    一.hashlib模块(加密模块) 1.什么叫hash:hash是一种算法(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 , ...

  5. day17_7.19包与logging模块,深浅拷贝

    一.包 在模块的定义里,模块就是方法的集合,可以将一些常用的方法封装到一个py文件中,通过调用使用,而且,其中的表现形式也有以包的形式导入. 其实,包就是一系列模块的结合体,表示形式就是一个文件夹,在 ...

  6. 2019-7-19 包、logging模块、hashlib(加密模块)、openpyxl模块、深浅拷贝

    一.包 什么是包: 它是一系列模块文件的结合体,表示形式就是一个文件夹.该文件内部通常会有一个__init__.py文件,包的本质还是一个模块,可以被调用,调包就相当于与调用__init__.py文件 ...

  7. 包、logging模块、hashlib模块、openpyxl模块、深浅拷贝

    包.logging模块.hashlib模块.openpyxl模块.深浅拷贝 一.包 1.模块与包 模块的三种来源: 1.内置的 2.第三方的 3.自定义的 模块的四种表现形式: 1.py文件 2.共享 ...

  8. 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 ...

  9. python模块: hashlib模块, configparse模块, logging模块,collections模块

    一. hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用 ...

随机推荐

  1. 【转】Spring事务详解

    1.事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,使用JDBC的事务管理机制,就是利用java.sql.Connection对象完成对事务的提交,那在没有Spring帮我们管理事务 ...

  2. 使用Kubeadm创建k8s集群之部署规划(三十)

    前言 上一篇我们讲述了使用Kubectl管理k8s集群,那么接下来,我们将使用kubeadm来启动k8s集群. 部署k8s集群存在一定的挑战,尤其是部署高可用的k8s集群更是颇为复杂(后续会讲).因此 ...

  3. JQuery操作CheckBox 第二次无法选中的问题

    用JQuery做CheckBox全选和反选的时候,遇到一个问题.当用JQ控制全选,全取消一次以后,再次点击全选,发现代码变了,但是CheckBox没有处于选中状态. 百度后得知: 我使用的方法是 $( ...

  4. Java emoji持久化mysql

    好久没有更新博客了,今天和大家分享一个关于emoji表情持久化问题,相信做web开发的都遇到过这样的问题,因为我们知道mysql的utf-8字符集保存不了保存不了表情字符,这是为什么呢?因为普通的字符 ...

  5. husky+ prettier + commitlint 提交前代码检查和提交信息规范

    一.安装相关的包 npm install -D husky npm install -D lint-staged // lint钩子 npm install -D prettiernpm instal ...

  6. spring+mybatis最简多数据源配置

    作者:纯洁的微笑出处:http://www.ityouknow.com/ 版权所有,欢迎保留原文链接进行转载:) 说起多数据源,一般都来解决那些问题呢,主从模式或者业务比较复杂需要连接不同的分库来支持 ...

  7. C++学习之路

    一.二分查找 1.binary_search:查找某个元素是否出现. a.函数模板:binary_search(arr,arr+size ,indx) b.参数说明: arr: 数组首地址 size: ...

  8. java往文本文件中写入信息并修改

    题目要求: 1.可以往一个文本文档中写入员工信息:name,id和详情 2.可以更改name package FanCQ.Xue.practice; import java.io.*;import j ...

  9. 提交bug的标准及书写规范

    Bug有效性 1.交付过程中测试者需按照专家设定好的模块,对Bug进行归类提交: 2.Bug的类型默认为UI问题.功能问题.崩溃问题,提交Bug时不能弄错: 3.需求是否明确.前提条件是否满足.输入数 ...

  10. OV SSL证书有哪些功能?网站安装OV SSL证书的好处

    OV SSL证书英文名称为Organization Validation SSL Certificate,申请OV SSL证书需要审核申请者对域名是否拥有控制权,同时审核申请者是否为一个合法登记.真实 ...