包和loggging模块

跨文件夹导入模块:

如果a文件夹所在目录在环境变量,a文件夹中的ma模块可以被以下方式导入
import a.ma  |  from a import ma

2.如果a文件夹所在目录在环境变量,a文件夹中的b文件夹的mb模块可以被以下方式导入
import a.b.mb    |   from a.b  import mb


3.如果a文件夹所在目录在环境变量,a文件夹中的b文件夹的mb模块中的bbb名字要被直接导入。
from a.b.mb import bbb  

注意:  .的左侧必须的文件夹

包:

包就是一系列模块的结合体,用文件夹来管理一系列有联系的模块,该文件夹就可以被称之为包,文件夹名为包名。

注:包与普通的文件夹不同,包的文件夹中一定存在一个__init__.py文件。

__init__.py文件:

1.产生一个全局名称空间,提供给包的,就代表包的名称空间

2.管理 包可以直接点出来使用的名字

导包的三件事:

首先还是产生执行文件的名称空间

  1.创建包文件夹下的__init__.py文件的名称空间

  2.执行包文件夹下的__init__.py文件,并将执行过程中产生的名字放入包下面的__init__.py文件的名称空间里面

  3.执行文件的名称空间拿到指向包下面的__init__.py文件名称空间里面的名字

直接使用包中模块:

如果只是想作为普通文件夹,py3中可以省略__init__文件,本质上文件夹也是包

导入的手段:1.指名道姓到某一个模块   | 2.指名道姓到某一个模块中名字

包的管理:

在包中采用相对导入管理模块或模块中名字

在包的__init__.py文件或是包中任意一个模块中

. 代表当前文件所在目录

..代表上一级文件目录

注意:.语法不能包,因为包外的文件都能够自执行,但.语法的导入的只能是模块与模块之间的,不能在执行文件中使用。

当你作为包的设计者来说:

  1.当模块的功能特别多的情况下,应该分文件管理

  2.每个模块之间为了避免后期模块改名的问题,你可以使用相对导入(包里面的文件应该都是模块)

站在包的开发者:如果使用绝对路径来管理包的自己的模块,那么它只需要永远以包的路径为基准依次导入模块

站在包的使用者:你必须得将包所在的那个文件夹路径添加到system path中(系统环境变量中)

注:

python2中要手动加__init__.py文件,py3不加也不会报错,当你在删除不要 的文件,千万不要随便删除__init__.py文件。

 

标准三流:

import sys
sys.stdin:input的底层

sys.stdout: print的底层
sys.stdout.write('输出信息')

sys.stderr:异常及logging默认打印方式的底层
sys.stderr.write('输出的信息\n')

logging模块:

操作日志的模块

日志:日常的流水,将程序运行过程中的状态或数据进行记录,一般都是记录到日志文件中

在正常的项目中,项目运行的一些打印信息,采用logging打印到文件中,这个过程就叫做记录日志。

import logging

# logging为默认打印者,名字叫root,配置采用以下方式
h1 = logging.StreamHandler()
h2 = logging.FileHandler('d.log')
logging.basicConfig(
    # filename='my.log',
    # filemode='w',
    # stream=sys.stderr,  # 往控制台打印采用具体的输出流
    format='%(asctime)s [%(levelname)s]- %(name)s: %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S',
    level=logging.DEBUG,  # 10, 代表DEBUG及DEBUG级别以上都能输出
    handlers=[h1, h2]
)

logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.error("error")
logging.critical("critical")

logging的四大成员:

logger:是产生日志的

filter:过滤日志的

handler:设置日志输出的位置

formmater:设置日志输出的格式

日志的五个等级

debug:调试信息  10级

info:正常信息  20级

warning:警告信息   30级

error:错误信息   40级

critical:危险信息  50级

配置文件的使用:

# 1.配置
LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'o_fmt1': {
            'format': '%(name)s:%(asctime)s - %(message)s'
        },
        'o_fmt2': {
            'format': '%(name)s:%(asctime)s [%(levelname)s] - %(message)s'
        }
    },
    'filters': {},
    'handlers': {
        'o_cmd': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'o_fmt1'
        },
        'o_file': {
            'level': 'WARNING',
            'class': 'logging.handlers.RotatingFileHandler',
            'formatter': 'o_fmt2',
            'filename': r'F:\python8期\课堂内容\day20\代码\part4\logging.log',  # 日志文件
            'maxBytes': 1024*1024*5,  # 日志大小 5M
            'backupCount': 5, #日志文件最大个数
            'encoding': 'utf-8',  # 日志文件的编码
        }
    },
    'loggers': {
        'o_owen': {
            'level': 'DEBUG',
            'handlers': ['o_cmd', 'o_file']
        },
        '': {
            'level': 'DEBUG',
            'handlers': ['o_file']
        }
    }
}

# 2.加载配置
import logging.config
logging.config.dictConfig(LOGGING_DIC)


# 3.使用
log = logging.getLogger('o_owen')
log.warning('123')

 

haslib模块:

加密模块,是用来做一些需要保密的对象

用法:

import haslib

md = haslib.md5()  # md5算法

md.update(加密的数据).encode('utf-8')  # 别忘了编码

md.hexdigest()提交上去

这个md5没有解密 的,只能碰撞解密。并且还再你要加密的数据上面再加盐下去,保证安全性。

openpyxl模块:

操作excel表格的模块

03版本之前 excel表格的后缀名叫xls

03版本之后  excel表格的后缀名为xlsx

xlwd  写excel

xlrt  读excel

xlwd和xlrt既支持03版本之前的excel文件也支持03版本之后的excel文件
openpyxl 只支持03版本之后的 xlsx

from openpyxl import Workbook
wb = Workbook()  # 先生成一个工作簿
wb1 = wb.create_sheet('index',0)  # 创建一个表单页  后面可以通过数字控制位置
wb2 = wb.create_sheet('index1')
wb1.title = 'login'  # 后期可以通过表单页对象点title修改表单页名称
wb1['A3'] = 666
wb1['A4'] = 444
wb1.cell(row=6,column=3,value=88888888)
wb1['A5'] = '=sum(A3:A4)'
wb2['G6'] = 999
wb1.append(['username','age','hobby'])
wb1.append(['jason',18,'study'])
wb1.append(['egon',84,'女教练'])


保存新建的excel文件
wb.save('test.xlsx')


from openpyxl import load_workbook  # 读文件


wb = load_workbook('test.xlsx',read_only=True,data_only=True)
print(wb)
print(wb.sheetnames)  # ['login', 'Sheet', 'index1']
print(wb['login']['A3'].value)
print(wb['login']['A4'].value)
print(wb['login']['A5'].value)  # 通过代码产生的excel表格必须经过人为操作之后才能读取出函数计算出来的结果值

res = wb['login']
print(res)
ge1 = res.rows
for i in ge1:
    for j in i:
        print(j.value)
View Code

 

深浅拷贝:

值拷贝:b拷贝了a,那么只要a的内容发生改变,那么b里面的内容也会发生改变

浅拷贝:只有a里面的可变类型发生改变,b才会发生改变了

深拷贝:2者没关系,随a怎么变,b不会发生改变

import copy

l = [1,2,[1,2]]
# l1 = l
# print(id(l),id(l1))
# l1 = copy.copy(l)  # 拷贝一份 .......  浅拷贝
# print(id(l),id(l1))
# # l[0] = 222
# # print(l,l1)
# l[2].append(666)
# print(l,l1)
l1 = copy.deepcopy(l)
l[2].append(666)
print(l,l1)
View Code

 

posted @ 2019-07-19 19:15  帅气逼人23  阅读(279)  评论(0编辑  收藏  举报