一、包

二、logging模块

三、hashlib

四、4.openpylx

五、深浅拷贝

 

一、包:

1.是一个文件夹 是一系列模块的结合体

2.该文件内部通常会有一个__init__.py文件

3.包的本质其实还是一个模块

包与模块执行时流程是什么?

 

模块:import 

1.运行执行文件时,产生一个执行文件的名称空间

2.运行执行文件中的模块导入代码,并创建模块名称空间,并将模块在执行代码时产生的名字放在该模块名称空间里

3.在执行文件名称空间里拿到一个名字,该名字指向模块名称空间。此名字就是模块名字。然后在通过

模块名.名字 来去模块中名字的值

From … import…

前面两个流程一样,只是最后一个不一样

3.直接在执行文件名称空间中拿到一个名字,该名字就是模块名称空间中存在的名字,通过该名字可以直接取值

 

 

包:首次导入包 import

1.先创建一个执行文件的名称空间

2.在包下创建一个__init__.py文件的名称空间

3.在执行包下面的__init__.py文件中的代码,并产出一个__init__.py文件的名称空间

4.在包文件中拿到一个指向包下面的__init__.py文件名称空间的里面名字

通过  包.名字来取值

 

研究模块与包 还可以站另外两个角度分析不同的问题

1.模块的开发者

2.模块的使用者

 

在导入语句中 .号的左边肯定是一个包(文件夹)


当你作为包的设计者来说

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

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

 

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

站在包的使用者:你必须得将包所在的那个文件夹路径添加到system path中

知识点:

1.python2如果要导入包,包下面必须要有__init__.py文件,不然报错

2.python3 如果要导入包,包下面没有__init__.py文件,也不会报错          

当你要删除程序不必要的文件的时候,千万不要随意删除__init__.py文件

二、Logging 日志模块:记录信息

 

日志的五个等级   logging.(debug,info,warning,error,critical)

  1. debug日志  #10 
  2. info日志    #20
  3. warning日志 #30
  4. error 日志   #40
  5. critical 日志  #50

 

在执行上面代码后,遇到以下问题:

  1. 文件里面存的是乱码
  2. 日志格式 已固定
  3. 如何既key打印到终端又可以写到文件中

学日志要了解的四个对象:

  1. Logger对象:复杂产生日志
  2. Filter对象:过滤日志对象(了解)
  3. Handle对象:控制日志输出的位置(文件/终端)   FileHandler(文件)   StreamHandler(终端)
  4. Formatter对象:规定日志内容的格式

 

 

 

一个日志编辑流程:

Import   logging

  1. (Logger)产生一个logger对象  logger= logging.getlogger(‘写一个日志相关的名字’)
  2. (filter)过滤日志(了解)
  3. (handler)控制日志输出的位置(文:FileHandler    终端:StreamHandler)

Hd1 = logging.FileHandler(‘文件名’)  

Hd2 = logging.StreamHandler()

  1. (Formatter)规定内容输出格式
    第一种:fmt1=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',datefmt='%Y-%m-%d %H:%M:%S %p')

第二种:fmt2= logging.Formatter ('%(asctime)s - %(name)s - %(levelname)s:  %(message)s',datefmt='%Y-%m-%d')

  1. 给logger对象绑定handler对象

Logger.addHandler(Hd1)

Logger.addHandler(Hd2)

6  给handler对象绑定formatter对象

   Hd1.setFormatter(fmt1)

Hd2.setFormatter(fmt2)

7  设置日志等级

    Logger.setLevel(级数)   10 20 30 40 50

8.记录日志

Logger.debug(内容1)

Logger.info(内容2)

Logger.warning(内容3)

Logger.error(内容4)

Logger.ccritical(内容5)

使用日志字典配置

  1. import os
  2. from logging import config
  3. logging.conifg. dictConfig(字典变量名)
  4. loggoer1 = logging.getlogger(‘给对象起个名字’)
  5. logging1.debug(‘内容1’)

        logging1.info(‘内容2’)

        logging1.waring(‘内容3’)

        logging1.error(‘内容4’)

       logging1.critical(‘内容5’)

 

三、hashlib 模块(加密模块)

import  hashlib  #这个加密的过程是无法解密的

md = hsahlib.md5()   # 用md5这个算法生成一个密文对象

第一种方法:md.update(‘hello’.encode(‘utf-8’)  # 往对象里传明文数据  update只能接受bytes类型的数据

第二种方法:md.update(b‘hello’)  # 往对象里传明文数据  update只能接受bytes类型的数据

print(md.hexdigest())  # 获取明文数据对应的密文

注意:传入的内容 可以分多次传入 只要传入的内容相同 那么生成的密文肯定相同

 

hashlib模块应用场景

1.密码的密文存储

2.校验文件内容是否一致

 

加盐处理

**在用给写入密码之前 在加一些内容,组合在一起(静态加盐处理)

**动态加盐处理:就是加的这些内容是不断变化的

# 撞库

1.不用的算法 使用方法是相同的

密文的长度越长 内部对应的算法越复杂

但是

    1.时间消耗越长

    2.占用空间更大

通常情况下使用md5算法 就可以足够了

四、Openpyxl 模块

操作表格的模块有以下几个:

  1. openpyxl 是比较火的操作表格模块   03版本以后
  2. xlwd(写excel)  xlrt(读excel)    都适用

 

了解的一个知识点:

03版本之前的excel文件的后缀名  叫xls

03版本之后的excel文件的后缀名  叫xlsx

 

写操作表格

From  openpyxl  import  Workbook

Wb = workbook()   # 生成一个工作簿

wb1 = wb.create_sheet('index',0)  # 创建一个表单页  后面可以通过数字控制位置

wb1.title = 'login' # 后期可以通过表单页对象点title修改表单页名称,默认第一个表单

Wb.save(‘工作簿名字.xlsx’)  这里名字要加后缀。Xlsx

 

读操作表格

From  openpylx  import  load_workbook

# 写
# 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(['tank',72,'吃生蚝'])
# wb1.append(['egon',84,'女教练'])
# wb1.append(['sean',23,'会所'])
# wb1.append(['nick',28,])
# wb1.append(['nick','','秃头'])

# 保存新建的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)

 

 

 

五、深浅拷贝:

 

posted on 2019-07-19 21:08  "莫欺少年穷  阅读(225)  评论(0编辑  收藏  举报