模块与包

1.包

什么是包?

它是一系列模块文件的结合体,表示形式就是一个文件夹。该文件夹内部通常会有一个__init__文件。创建包的目的不是为了运行,而是被导入使用,包的本质还是一个模块。

首次导入包:

  先产生一个执行文件的名称空间

(1).创建包下面的__init__.py文件的名称空间

(2).执行包下面的__init__.py文件中的代码,将产生的名字放入包下面的__init__.py文件名称空间中

(3).在执行文件中拿到一个指向包下面的__init__.py文件名称空间的名字

在导入语句中,号的左边肯定是一个包(文件夹)。在python3中,即使包下没有__init__.py文件,import仍然不会报错;而在python2中,包下一定要有该文件,否者import报错。当你在删除不必要文件的时候,不要随意删除__init__.py文件。

2.logging模块

1.日志模块中共分为五个等级,分别是:

  logging.debug('debug日志')  #等级1

  logging.info('info日志')  #等级2

  logging.warning('warning日志')  #等级3

  logging.error('error日志')  #等级4

  logging.critical('critical日志')  #等级5

2.日志还有四种不同的对象

  logger对象:负责产生日志

  filter对象:过滤日志

  handler对象:控制日志输出的位置

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

# 1.logger对象:负责产生日志
logger = logging.getLogger('转账记录')
# 2.filter对象:过滤日志(了解)

# 3.handler对象:控制日志输出的位置(文件/终端)
hd1 = logging.FileHandler('a1.log',encoding='utf-8')  # 输出到文件中
hd2 = logging.FileHandler('a2.log',encoding='utf-8')  # 输出到文件中
hd3 = logging.StreamHandler()  # 输出到终端

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

# 5.给logger对象绑定handler对象
logger.addHandler(hd1)
logger.addHandler(hd2)
logger.addHandler(hd3)

# 6.给handler绑定formmate对象
hd1.setFormatter(fm1)
hd2.setFormatter(fm2)
hd3.setFormatter(fm1)

# 7.设置日志等级
logger.setLevel(20)

# 8.记录日志
logger.debug('写了半天 有点小累')

3.logging配置字典

4.hashlib模块

  哈希算法是指通过一个函数,把任意长度的数据转换为一个长度固定的数据串,这个字符串称之为密文。当密文的长度越长,内部对应的算法就越复杂。使用哈希算法的目的是为了发现原始数据是否被人篡改过。

import hashlib   # 引入模块
md = hashlib.md5()
md.update(b'areyouok?')
print(md.hexdigest())
>>>:408ac8c66b1e988ee8e2862edea06cc7

md.update(b'are')
md.update(b'you')
md.update(b'ok?')
print(md.hexdigest())
>>>:408ac8c66b1e988ee8e2862edea06cc7
# 相同的内容可以分多次传入,只要传入的内容相同,那么生成的密文也肯定相同。

  可以通过加盐处理,增强密码的保护性。

# 静态加盐处理
import hashlib
md = hashlib.md5()
md.update(b'随便写些内容都可以')# 加盐处理
md.update(b'hello')# 真正的内容
print(md.hexdigest())

#动态加盐处理
import hashlib
def get_md5(data):
    md = hashlib.md5()
    md.update('加盐'.encode('utf-8'))
    md.update(data.encode('utf-8'))
    return md.hexdigest()
password = input("password>>>: ")
res = get_md5(password)
print(res) # 输入密码以后,会得到与密码相对应的密文

5.openpyxl模块

03版本之前,Excel文件的后缀名叫xls;03版本以后,Excel文件的后缀名叫xlsx。

xlwd指写Excel,xlrt指读Excel。xlwd和xlrt既支持03版本之前的Excel文件,也支持03版本之后的Excel文件。

from openpyxl import Workbook  # 读文件
wb = Workbook()
wb1 = wb.create_sheet('xxx',0) # 创建一个表单页,后面可以通过数字来控制位置
wb2 = wb.create_sheet('yyy',1)
# wb1.title = 'login'
# wb1['A2'] = 444
# wb1['A3'] = 555
# wb1['A4'] = '=sum(A2:A3)'
wb1.cell(row=5,column=4,value=33)# cell(行,列,要写的值 )

wb2.append(['username','age','hobby '])
wb2.append(['lili',18,'reading'])

wb.save('li.xlsx') # 保存新建的Excel文件

from openpyxl import load_workbook  # 写文件

 

posted @ 2019-07-21 23:03  kuanglinfeng  阅读(187)  评论(0编辑  收藏  举报