包 

包是什么

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

    包的本质还是模块

  

    他通常会有__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. shell的用处到底大不大

    我曾在智联招聘等网站上搜寻有关shell脚本员的职位,与C++.JAVA等热门语言相比,冷清很多.看上去似乎招shell程序员的公司比较少.是不是公司不重视或者是很少用到shell这个东东呢?     ...

  2. xfs 文件系统修复

    pvcreate /dev/sdb1 pvcreate /dev/sdc1 pvcreate /dev/sdd1 vgcreate vg_bricks /dev/sdb1 vgcreate vg_br ...

  3. 如何进行高效的源码阅读:以Spring Cache扩展为例带你搞清楚

    摘要 日常开发中,需要用到各种各样的框架来实现API.系统的构建.作为程序员,除了会使用框架还必须要了解框架工作的原理.这样可以便于我们排查问题,和自定义的扩展.那么如何去学习框架呢.通常我们通过阅读 ...

  4. Maven(二)Maven 的基本配置

    Maven 的基本配置 Maven 中仓库的概念 Maven 中的仓库是用拿过来存储所有项目的依赖关系的.当你创建一个 Maven 项目时,Maven 会通过依赖机制先到你本地仓库(自己维护的仓库)中 ...

  5. UVA10375 选择与除法 Choose and divide 题解

    题目链接: https://www.luogu.org/problemnew/show/UVA10375 分析: 这道题可以用唯一分解定理来做. 什么是唯一分解定理?百度即可,这里也简介一下. 对于任 ...

  6. 洛谷P1396 营救 题解

    题目:https://www.luogu.org/problemnew/show/P1396 分析: 这其实一看就是一个最短路的近似模板的题目,但我们要注意到两个区之间可能会有多条道路,所以说我们只需 ...

  7. Flume框架的学习使用

    Flume框架的学习使用 Flume简介 Flume提供一个分布式的,可靠的,对大数据量的日志进行高效收集.聚集.移动的服务. Flume基于流失架构,容错性强,也很灵活简单 Flume,kafka用 ...

  8. 重复造轮子系列——基于Ocelot实现类似支付宝接口模式的网关

    重复造轮子系列——基于Ocelot实现类似支付宝接口模式的网关 引言 重复造轮子系列是自己平时的一些总结.有的轮子依赖社区提供的轮子为基础,这里把使用过程的一些觉得有意思的做个分享.有些思路或者方法在 ...

  9. Java网络和代理

    Java网络和代理 1)简介 在当今的网络环境中,特别是企业网络环境中,应用程序开发人员必须像系统管理员一样频繁地处理代理.在某些情况下,应用程序应该使用系统默认设置,在其他情况下,我们希望能够非常严 ...

  10. solidity的delete操作汇总

    简介 Solidity中的特殊操作符delete用于释放空间,为鼓励主动对空间的回收,释放空间将会返还一些gas. delete操作符可以用于任何变量,将其设置成默认值0. 删除枚举类型时,会将其值重 ...