• 模块


    模块

    hashlib 模块:加密

    # 加密:
    # 1.有解密的加密方式 (不安全)
    # 2.无解密的加密方式:碰撞检查
    #   --1)不同数据加密后的结果一定不一样
    #   --2)相同数据的加密结果一定是一致的
    
    # import hashlib
    #
    # def lock(msg):
    #     b_msg=msg.encode('utf-8')  # 加密只能是b模式
    #     # 对数据进行加密
    #     cipher = hashlib.md5(b_msg)
    #     # 拿到加密后的字符串
    #     return cipher.hexdigest()  # 返回十六进制
    
    import hashlib
    '''
    user_map = {}
    # user_map = {'abc': '202cb962ac59075b964b07152d234b70'}
    def lock(msg):
        b_msg = msg.encode('utf-8')
        # 将数据进行加密
        cipher = hashlib.md5(b_msg)
        # 拿到加密后的字符串
        return cipher.hexdigest()
    
    def register():
        print('注册...')
        user = input('user: ')
        pwd = input('pwd: ')
        lock_pwd = lock(pwd)
        # print(user)
        # print(lock_pwd)
        user_map[user] = lock_pwd
        print(user_map)
    
    register()
    
    def loging():
        print('登录...')
        user = input('user: ')
        pwd = input('pwd: ')
        if user in user_map:
            lock_pwd = lock(pwd)
            if user_map[user] == lock_pwd:
                print('登录成功')
            else:
                print('登录失败')
        else:
            print('账号不存在')
    loging()
    '''
    
    
    # part1
    # cipher = hashlib.md5('要被加密的字符串'.encode('utf-8'))
    # print(cipher.hexdigest())
    
    # cipher = hashlib.md5('要被加密的字符串'.encode('utf-8'))
    # print(cipher.hexdigest())
    # # 整体被加密的数据一样,加密后的结果就一样
    # # cipher = hashlib.md5('要被加密'.encode('utf-8'))
    # # cipher.update('的字'.encode('utf-8'))
    # # cipher.update('符串'.encode('utf-8'))
    # print(cipher.hexdigest())
    
    
    # part2:加盐 - add salt
    # cipher = hashlib.md5()
    # msg = input('msg:')
    # # 加前盐
    # cipher.update('前盐'.encode('utf-8'))
    # # 要被加密的数据
    # cipher.update(msg.encode('utf-8'))
    # # 加后盐
    # cipher.update('后盐'.encode('utf-8'))
    # print(cipher.hexdigest())
    #
    # print(hashlib.md5('前盐123后盐'.encode('utf-8')).hexdigest())
    
    
    # part3
    # cipher = hashlib.sha3_512('abc123呵呵'.encode('utf-8'))
    # print(cipher.hexdigest())
    
    
    import hmac
    # 和md5()区别 hashlib.md5():
    #       -- 可以有初始参数,可以没有初始参数
    #       -- 可以通过update再添加新内容
    # hmac.new():
    #       -- 必须有初始参数
    #       -- 可以通过update再添加新内容
    cipher = hmac.new('盐'.encode('utf-8'))
    cipher.update('数据'.encode('utf-8'))
    print(cipher.hexdigest())
    

    logging模块

    import os
    import logging.config
    
    # 定义三种日志输出格式 开始
    
    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'
    
    my_format = '[%(levelname)s][%(asctime)s] %(message)s'
    
    
    # 定义日志输出格式 结束
    
    logfile_dir = os.path.dirname(os.path.abspath(__file__))  # log文件的目录
    
    logfile_name = 'all2.log'  # log文件名
    yaya_name = 'yaya.log'
    # 如果不存在定义的日志目录就创建一个
    if not os.path.isdir(logfile_dir):
        os.mkdir(logfile_dir)
    
    # log文件的全路径
    logfile_path = os.path.join(logfile_dir, logfile_name)
    yaya_logfile_path = os.path.join(logfile_dir, yaya_name)
    # log配置字典
    LOGGING_DIC = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'standard': {
                'format': standard_format
            },
            'simple': {
                'format': simple_format
            },
            'yaya': {
                'format': my_format
            }
        },
        'filters': {},
        'handlers': {
            #打印到终端的日志
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',  # 打印到屏幕
                'formatter': 'simple'
            },
            #打印到文件的日志,收集info及以上的日志
            'default': {
                'level': 'DEBUG',
                'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
                'formatter': 'standard',
                'filename': logfile_path,  # 日志文件
                'maxBytes': 1024*1024*5,  # 日志大小 5M
                'backupCount': 5,
                'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
            },
            'default_handler': {
                'level': 'DEBUG',
                'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
                'formatter': 'yaya',
                'filename': yaya_logfile_path,  # 日志文件
                '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)传递
            },
            'yaya': {
                'handlers': ['default_handler', 'console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
                'level': 'DEBUG',
                'propagate': False,  # 向上(更高level的logger)传递
            },
    
        },
    
    }
    
    
    def load_my_logging_cfg():
        logging.config.dictConfig(LOGGING_DIC)  # 导入上面定义的logging配置
        logger = logging.getLogger(__name__)  # 生成一个log实例
        logger.info('It works!')  # 记录该文件的运行状态
    
    if __name__ == '__main__':
        load_my_logging_cfg()
    

    configparser模块:操作配置文件

    # my.ini
    # 注释:该配置文件中,值直接书写,但有四种类型
    #       -- int float boolean str
    # section
    [server] 
    # name:option | value:mysql
    name = mysql 
    version = 20000
    
    [client]
    name = owen
    adress = 192.168.11.174
    
    import configparser
    # 初始化配置文件的操作对象
    parser = configparser.ConfigParser()
    # 读
    parser.read('my.ini', encoding='utf-8')
    # 所有section
    print(parser.sections())  
    # 某section下所有option
    print(parser.options('section_name'))  
    # 某section下某option对应的值
    print(parser.get('section_name', 'option_name')) 
    
    # 写
    parser.set('section_name', 'option_name', 'value')
    parser.write(open('my.ini', 'w'))
    

    subprocess模块:操作shell命令

    import subprocess
    order = subprocess.Popen('终端命令', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    # order.stdout 流对象,order.stdout.read()来获取操作的信息字符串
    suc_res = order.stdout.read().decode('系统默认编码')
    err_res = order.stderr.read().decode('系统默认编码')
    
    # stdout:存放指令执行成功的信息管道 | stderr 存放指令执行失败的信息管道
    order = subprocess.run('终端命令', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    # order.stdout 是字符串信息,就是Popen下order.stdout.read()
    suc_res = order.stdout.decode('系统默认编码')
    err_res = order.stderr.decode('系统默认编码')
    

    xlrd模块:excel读

    			年终报表				
    		教学部	市场部	咨询部	总计
    Jan-19	10		15		5	30
    Feb-19	10		15		5	30
    Mar-19	10		15		5	30
    Apr-19	10		15		5	30
    May-19	10		15		5	30
    Jun-19	10		15		5	30
    Jul-19	10		15		5	30
    Aug-19	10		15		5	30
    Sep-19	10		15		5	30
    Oct-19	10		15		5	30
    Nov-19	10		15		5	30
    Dec-19	10		15		5	30
    
    import xlrd
    # 读取文件
    work_book = xlrd.open_workbook("机密数据.xlsx")
    # 获取所有所有表格名称
    print(work_book.sheet_names())
    # 选取一个表
    sheet = work_book.sheet_by_index(1)
    # 表格名称
    print(sheet.name)
    # 行数
    print(sheet.nrows)
    # 列数
    print(sheet.ncols)
    # 某行全部
    print(sheet.row(6))
    # 某列全部
    print(sheet.col(6))
    # 某行列区间
    print(sheet.row_slice(6, start_colx=0, end_colx=4))
    # 某列行区间
    print(sheet.col_slice(3, start_colx=3, end_colx=6))
    # 某行类型 | 值
    print(sheet.row_types(6), sheet.row_values(6))
    # 单元格
    print(sheet.cell(6,0).value) # 取值
    print(sheet.cell(6,0).ctype) # 取类型
    print(sheet.cell_value(6,0)) # 直接取值
    print(sheet.row(6)[0])
    # 时间格式转换
    print(xlrd.xldate_as_datetime(sheet.cell(6, 0).value, 0))
    

    xlwt模块:excel写

    import xlwt
    # 创建工作簿
    work = xlwt.Workbook()
    # 创建一个表
    sheet = work.add_sheet("员工信息数据")
    # 创建一个字体对象
    font = xlwt.Font()
    font.name = "Times New Roman"  # 字体名称
    font.bold = True  # 加粗
    font.italic = True  # 斜体
    font.underline = True  # 下划线
    # 创建一个样式对象
    style = xlwt.XFStyle()
    style.font = font
    keys = ['Owen', 'Zero', 'Egon', 'Liuxx', 'Yhh']
    # 写入标题
    for k in keys:
        sheet.write(0, keys.index(k), k, style)
    # 写入数据
    sheet.write(1, 0, 'cool', style)
    # 保存至文件
    work.save("test.xls")
    

    xml模块

    <?xml version="1.0"?>
    <data>
        <country name="Liechtenstein">
            <rank updated="yes">2</rank>
            <year>2008</year>
            <gdppc>141100</gdppc>
            <neighbor name="Austria" direction="E"/>
            <neighbor name="Switzerland" direction="W"/>
        </country>
        <country name="Singapore">
            <rank updated="yes">5</rank>
            <year>2011</year>
            <gdppc>59900</gdppc>
            <neighbor name="Malaysia" direction="N"/>
        </country>
        <country name="Panama">
            <rank updated="yes">69</rank>
            <year>2011</year>
            <gdppc>13600</gdppc>
            <neighbor name="Costa Rica" direction="W"/>
            <neighbor name="Colombia" direction="E"/>
        </country>
    </data>
    
    import xml.etree.ElementTree as ET
    # 读文件
    tree = ET.parse("xmltest.xml")
    # 根节点
    root_ele = tree.getroot()
    # 遍历下一级
    for ele in root_ele:
        print(ele)
        
    # 全文搜索指定名的子标签
    ele.iter("标签名")
    # 非全文查找满足条件的第一个子标签
    ele.find("标签名")
    # 非全文查找满足条件的所有子标签
    ele.findall("标签名")
    
    # 标签名
    ele.tag
    # 标签内容
    ele.text
    # 标签属性
    ele.attrib
    
    # 修改
    ele.tag = "新标签名"
    ele.text = "新文本"
    ele.set("属性名", "新属性值")
    
    # 删除
    sup_ele.remove(sub_ele)
    
    # 添加
    my_ele=ET.Element('myEle')
    my_ele.text = 'new_ele' 
    my_ele.attrib = {'name': 'my_ele'}
    root.append(my_ele)
    
    # 重新写入硬盘
    tree.write("xmltest.xml")
    

  • 相关阅读:
    Windows共享上网的详细设置
    使用树莓派实现微信远程监控
    数据结构——队列及循环队列
    springmvc web 大文件上传源代码
    springboot web 大文件上传源代码
    jsp web 大文件上传源代码
    csharp web 大文件上传源代码
    c# web 大文件上传源代码
    .net web 大文件上传源代码
    asp.net web 大文件上传源代码
  • 原文地址:https://www.cnblogs.com/huangxuanya/p/10808001.html
Copyright © 2020-2023  润新知