• 模块与包


    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  # 写文件
  • 相关阅读:
    Vuejs
    Vuejs
    Vuejs
    Vuejs
    JS高级之面试必须知道的几个点
    用vue快速开发app的脚手架工具
    作为一名前端开发工程师,你必须掌握的WEB模板引擎:Handlebars
    REST接口设计规范总结
    eclipse实现JavaWeb应用增量打包
    转载:作为面试官,我是怎么快速判断程序员能力的?
  • 原文地址:https://www.cnblogs.com/blue-tea/p/11215151.html
Copyright © 2020-2023  润新知