什么是包

创建一个aaa的包,自行创建一个__init__py文件

回忆 创建一个tbjx模块发生的三件事:
将该tbjx文件加载到内存.
创建一个以tbjx命名的名称空间.
通过tbjx. 的方式引用tbjx模块的所有的名字.创建一个包,也会发生三件事:
将该aaa包内 __init__py文件加载到内存.
创建一个以aaa命名的名称空间.
通过aaa. 的方式引用__init__的所有的名字.
包名就是 幕后指使的 init执行

import 方式导入

aaa包与执行文件同级的情况
引用aaa包的__init__中的name
import aaa
print(aaa.name)#因为执行aaa 其实就是执行__inint__中内容# 我想要引用 aaa包的m1文件的a变量
# 错误示例1:
import aaa
# 1. aaa的 __init__ 里面 写import m1
# 2. print(aaa.m1.a)
# print(aaa.m1.a)
# 报错原因: No module named 'm1'
# 分析报错原因: 模块找不到 内存,内置,sys.path三个地方找不到.
# m1 不在内存,不在内置,sys.path  会主动加载执行文件(包的使用.py)的当前目录. 而他不在# 解决方式:
import aaa
# 1. 在执行文件写入 import aaa
# 2. aaa的 __init__ 里面 写 from aaa import m1#m1是要引入的文件名 aaa是包名
# 3. 然后在执行文件  aaa.m1.a
# print(aaa.m1.a) 引用 aaa包的m1的a
# print(aaa.m1.func1())#引用 aaa包的m1的func1()# 如何在当前文件中,引用 aaa包的bbb包中__init__中 name.
# 1. 在执行文件写入 import aaa
# 2. aaa的 __init__ 里面 写 from aaa import bbb
# 3. 然后在执行文件 print(aaa.bbb.name)# 如何在当前文件中,引用 aaa包的bbb包 a1.py文件中的 name
# 1. 在执行文件写入 import aaa
# 2. 在aaa包的__Init__ 写上 from aaa import bbb  (这样写 bbb包的__init__里面所有的名字都能引用)
# 3. 在bbb包的__Init__ 写上 from aaa.bbb import mb
4 print(aaa.bbb.a1.name)# 首先 无论从哪里引用模块,import 或者 from  ... import ...
# 最开始的模块或者包名一定是内存,内置,sys.path中能找到的.(可参考bbb包中的 __init__)
# 直接import 为了让我们会使用 包里面的 __init__

from方式导入 最好用

# 第二类: 执行文件 通过 from ... import... 导入包以及包内的功能
# from ... import ...
# 通过这种方式不用设置__init__文件我想要引用 aaa包的__init__ name
from aaa import name
print(name)我想要引用 aaa包的 a1 文件中name
from aaa import a1
print(a1.name)我想要引用 aaa包的 bbb包 __init__ name
from aaa.bbb import name
print(name)我想要引用 aaa包的 bbb包 a1文件的中的name
from aaa.bbb import a1
print(a1.name)重点
# from a.b.c import d
# c的. 的前面一定是包
# import 的后面一定是名字 可以是文件,  并且不能 再有点   不能有点# from aaa.bbb.m2.func1 import a  # 错误的
# from aaa.bbb import m2
# m2.func1()

相对导入与绝对导入

# from nb.m1 import f1,f2# from nb.m2 import f3,f4# from nb.m3 import f5,f6# 目前为止,今天所看到的引用模块的方式都是绝对导入# 相对导入: . ..  ......from .m1 import f1,f2from .m2 import f3,f4from .m3 import f5,f6from .dsb.ly import f7
需求
# 由于nb模块增加了很多很多功能,所以我们nb这个文件就要划整一个包,
# 无论对nb模块有任何操作,对于使用者来说不应该改变,极少的改变对其的调用. 像装饰器
第一版 文件变成包了 包与执行文件 在同一目录  用户 使用方式
# import nb
# nb.f1()
# nb.f2()
我们的解决方式 在aaa包的__init__ 加入
from nb.m1 import f1,f2#m1 中有f1 f2
from nb.m2 import f3,f4
from nb.m3 import f5,f6第2版 包与 执行文件 不在同一文件 要想运行 必须在执行文件 添加sys 路径
import sys
sys.path.append(r'D:\python22\python 23 代码\day19\相对导入\第2版 包在另一个文件下\dir') #写死了 可以动态传第3版 模块改名
在__init__ 里面改成相对导入
from .m1 import f1,f2#当前目录上一级
from .m2 import f3,f4
from .m3 import f5,f6

log日志

工作日志分四个大类:

系统日志:记录服务器的一些重要信息:监控系统,cpu温度,网卡流量,重要的硬件的一些指标,运维人员经常使用的,运维人员,记录操作的一些指令.

网站日志: 访问异常,卡顿,网站一些板块,受欢迎程度,访问量,点击率.等等,蜘蛛爬取次数等等.

辅助开发日志: 开发人员在开发项目中,利用日志进行排错,排除一些避免不了的错误(记录),辅助开发.

记录用户信息日志: 用户的消费习惯,新闻偏好,等等.(数据库解决)

日志: 是谁使用的? 一般都是开发者使用的.

三个版本:

Low版(简易版).

标配版(标准版)
import logging
def log(lj):# 创建一个logging对象logger = logging.getLogger()# 创建一个文件对象fh = logging.FileHandler(lj, encoding='utf-8')#传参# 创建一个屏幕对象sh = logging.StreamHandler()# 配置显示格式# formatter1变量名formatter1 = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')formatter2 = logging.Formatter('%(asctime)s %(message)s')fh.setFormatter(formatter1)#绑定  屏幕文件sh.setFormatter(formatter2)  #绑定屏幕logger.addHandler(fh)#绑定文件logger.addHandler(sh)#绑定屏幕# 总开关logger.setLevel(10)fh.setLevel(10)#文件级别sh.setLevel(50)#屏幕级别logging.debug('调试模式')  # 10logging.info('正常模式')  # 20logging.warning('警告信息')  # 30logging.error('错误信息')  # 40# logging.critical('严重错误信息')  # 50
log(r'D:\s23\day19 包的初识 日志模块\day19\日志\标配版日志\aaa\zz.log')

旗舰版(项目中使用的,Django项目) ***

自定制(通过字典的方式)
轮转日志的功能
"""
logging配置
"""import os
import logging.config# 定义三种日志输出格式 开始
def load_my_logging_cfg(n):standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \'[%(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_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))+"\log"  # log文件的目录**************************logfile_name = '创建课程'+'.log'  # log文件名************** 'all2.lg'# 如果不存在定义的日志目录就创建一个if not os.path.isdir(logfile_dir):os.mkdir(logfile_dir)# log文件的全路径 调最外层'handlers'里面logfile_path = os.path.join(logfile_dir, logfile_name)# log配置字典# LOGGING_DIC第一层的所有的键不能更改LOGGING_DIC = {'version': 1,  # 版本号'disable_existing_loggers': False,  # 固定写法'formatters': {'standard': {'format': standard_format##********绑定上面的3种格式之一对应下面字典 'formatter'},#标准的格式'simple': {'format': simple_format},#简单的格式'chaojiandan':{'format':id_simple_format},#超简单的格式绑定上面的3种格式之一对应下面字典 'formatter'},  # 配置格式 上面3个 选其中一个 上面调了 下面也调'filters': {},  # 固定空字典 过滤模式'handlers': {# 打印到终端的日志'console': {'level': 'ERROR',######调级别 5个级别  屏幕显示只要调这个 可以改'class': 'logging.StreamHandler',  # 打印到屏幕 固定的'formatter': 'simple' ##****调屏幕显示格式 可以改 对应'standard'里面的键  'standard' 'simple'},# 打印到文件的日志,收集info及以上的日志'default': {'level': 'DEBUG',######调级别5个级别   文件显示只要调这个 可以改'class': 'logging.handlers.RotatingFileHandler',  # 配置轮转 保存到文件 固定不变'formatter': 'standard',###****调文件显示格式 可以改 对应'standard'里面的键  'standard' 'simple''filename': logfile_path,  # 日志文件 对应 log文件的全路径  要一一对应'maxBytes': 1024*1024*5,  # 日志大小 5M 以字节为单位'backupCount': 5,#轮转次数'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了},},  # 配置 句柄 是文件写入还是屏幕显示'loggers': {# logging.getLogger(__name__)拿到的logger配置'': {'handlers': ['default', 'console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕'level': 'DEBUG',#总级别'propagate': True,  # 向上(更高level的logger)传递},},  # 固定写法}# def load_my_logging_cfg(n):logging.config.dictConfig(LOGGING_DIC)  # 导入上面定义的logging配置 固定不变logger = logging.getLogger('ATM日志')  # 生成一个log实例logger.debug(n)  # 记录该文件的运行状态 比如存钱logger.info(n) 可以配置5个级别???
#[2019-07-06 22:35:37,315][MainThread:11308][task_id:ATM][common.py:104][INFO][11111111]# if __name__ == '__main__':
#     load_my_logging_cfg(555)
#     pass# logging.debug('debug message')#10调试模式 括号里面是提示
# logging.info('info message')#20正常模式
# logging.warning('warning message')#30警告模式
# logging.error('error message')#40错误信息 ERROR
# logging.critical('critical message')#50严重错误信息

转载于:https://www.cnblogs.com/saoqiang/p/11377096.html

python包的初始与日志模块相关推荐

  1. python大型项目中的日志模块_Python中日志模块的使用

    前言 程序和脚本往往是无人值守运行的,一旦发生问题,就需要我们去追溯当时的情况来定位问题的原因. 这便需要我们在程序和脚本中引入日志的功能. 相比于print信息,使用logging日志有以下优点 可 ...

  2. python包的init文件_Python模块包中__init__.py文件功能分析

    本文实例讲述了Python模块包中__init__.py文件功能.分享给大家供大家参考,具体如下: 用django做开发已经一年多的时间,但基本没注意python模块中__init__.py文件存在的 ...

  3. python logging模块的作用_Python 日志模块logging分析及使用-2

    本文作为Python日志模块的补充,主要介绍日志回滚RotatingFileHandler和TimedRotatingFileHandler的使用,以及其所带来的问题.Logger对象的日志等级是如何 ...

  4. Python项目中 封装日志模块logging 及快速调用方法

    前言 在 Python 中,可以直接用自带的 logging 模块来记录日志,但是在使用时我们需要配置一些 Handler.Formatter 来进行一些处理,比如把日志输出到不同的位置,或者设置一个 ...

  5. python - 啃书 第七章 模块、包和库 (一)

    概述 在Python中,一个模块(Module)是一个以.py结尾的Python文件,包含了Python对象和语句. 在python中,一切皆对象.数字.字符串.元组.列表.字典.函数.方法.类.模块 ...

  6. Python基础17-模块与包基础02、常用模块之time、random

    目录 名字冲突与避免 设置BASE_DIR保证程序能找到模块位置 time random 名字冲突与避免 在test.py里写下面一段代码,用正则表达式包re进行匹配,匹配出123开头的字符.如果我们 ...

  7. Python之配置日志模块logging

    一.定义日志打印方式 如果我们运行自己的程序,有时候需要记录程序运行过程中出现的问题或者信息.可以运用日志模块logging来记录,该模块日志格式可以根据用户需求来自己定义. 常见打印日志信息形式如下 ...

  8. Python的日志模块logging的使用

    Python的日志模块logging的使用 1 logging模块介绍 2 logging 简单示例 3 logging.basicConfig() 4 logging组件 4.1 Logger类 4 ...

  9. python logging日志模块的使用

    1.日志级别 日志一共分成5个等级,从低到高分别是:DEBUG ,INFO, WARNING ,ERROR, CRITICAL. DEBUG:详细的信息,通常只出现在诊断问题上 INFO:确认一切按预 ...

最新文章

  1. 深入理解Python中的生成器
  2. android资源包混淆,Android---andresguard资源混淆
  3. Java短类的compareTo()方法和示例
  4. pymssql.OperationalError: (20017 问题解决
  5. python设计模式总结
  6. RIDE在linux系统下运行,在linux上执行robotframework用例
  7. UI设计加载动效趋势|可以认真学习临摹的素材模板
  8. MySQL/MariaDB表表达式(3):视图
  9. 字节跳动武汉招聘 2000 人,距离大厂 Offer,你还差这篇 Java 干货!| 原力计划...
  10. GDB 调试命令讲解-转
  11. 计算机云教室,希望云教室电脑版
  12. Nature综述|整合组学分析护航健康,推动精准医学时代的到来!
  13. Linux中shell的cat,linux shell cat 命令
  14. html打开ppt自动播放,ppt文件怎么打开就可以全屏自动播放
  15. 拍摄高质量数码照片的三条原则:安全快门、低感光度、最佳光圈
  16. MySQL学习笔记(九)MVCC
  17. 专插本历年真题_21年专插本历年真题试卷无偿分享
  18. CocosCreator小技巧-加速游戏
  19. 使用EasyUI combobox的loadData 加载数据
  20. 最新考古学发现: 人类起源于亚洲

热门文章

  1. 客户端级别的渲染分析工具 dynaTrace
  2. thinkphp-无限分类下根据任意部门获取顶级部门ID
  3. 架构师必须补充的能力
  4. 26 fps 的视频超分辨率模型 DAP!在线输出720P视频
  5. 哈工大鹏程lab武大提出对比学习+超分模型,实现了新的SOTA
  6. 商汤港理工提出基于聚类的联合建模时空关系的 GroupFormer 用于解决群体活动识别问题,性能SOTA...
  7. CVPR2021 最佳论文候选—提高图像风格迁移的鲁棒性
  8. 百炼成钢!自己动手写一个深度学习框架!
  9. 新视角:用图像分类来建模文字识别也可以SOTA
  10. 如何将学术经历整合为求职简历?