• 常用模块--hashlib hmac:加密 xml xlrd xlwt:excel读|写 configparser subprocess


    1、hashlib模块:加密

    加密: 
    1.有解密的加密方式
    2.无解密的加密方式:碰撞检查 hashlib
      -- 1)不同数据加密后的结果一定不一致
      -- 2)相同数据的加密结果一定是一致的
    import hashlib
    # 基本使用
    cipher = hashlib.md5('需要加密的数据的二进制形式'.encode('utf-8'))
    print(cipher.hexdigest())  # 加密结果码
    
    # 加盐
    cipher = hashlib.md5()
    cipher.update('前盐'.encode('utf-8'))
    cipher.update('需要加密的数据'.encode('utf-8'))
    cipher.update('后盐'.encode('utf-8'))
    print(cipher.hexdigest())  # 加密结果码
    
    # 其他算法
    cipher = hashlib.sha3_256(b'')
    print(cipher.hexdigest())
    cipher = hashlib.sha3_512(b'')
    print(cipher.hexdigest())

     2、hmac模块:加密

    # 必须加盐
    cipher = hmac.new(''.encode('utf-8'))
    cipher.update('数据'.encode('utf-8'))
    print(cipher.hexdigest())

    和md5()区别 :

    hashlib.md5():      
      -- 可以有初始参数,可以没有初始参数      
      -- 可以通过update再添加新内容

    hmac.new():      
      -- 必须有初始参数      
      -- 可以通过update再添加新内容

     3、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

    读写:

    from configparser import ConfigParser
    # 初始化配置文件的操作对象
    parser = ConfigParser()
    #
    parser.read('my.ini', encoding='utf-8')
    # 大分类:section
    print(parser.sections())
    # 某分类下的keys:option
    print(parser.options('server'))
    print(parser.options('client'))
    # for section in parser.sections():
    #     print(parser.options(section))
    # 获取某section下某option的具体值
    # res = parser.get('server', 'version')
    res = parser.getfloat('server', 'version')
    print(res, type(res))
    
    #
    parser.set('server', 'version', '20000')  # 写到内存
    parser.write(open('my.ini', 'wt'))
    ini配置文件操作模块

    示例:

    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'))

    4、subprocess模块:操作shell命令

    import subprocess
    
    # subprocess.run('dir', shell=True)
    
    order = subprocess.Popen('dir1',
                             shell=True,
                             # 存放指令执行成功的信息管道
                             stdout=subprocess.PIPE,
                             # 存放指令执行失败的信息管道
                             stderr=subprocess.PIPE
                             )
    print(order.stdout)
    # success_msg = order.stdout.read().decode('GBK')
    # print(success_msg)
    # error_msg = order.stderr.read().decode('GBK')
    # print(error_msg)
    # 实际项目中,会接着对success_msg加以分析处理
    
    
    order = subprocess.run('dir',
                           shell=True,
                           # 存放指令执行成功的信息管道
                           stdout=subprocess.PIPE,
                           # 存放指令执行失败的信息管道
                           stderr=subprocess.PIPE
                           )
    print(order.stdout)
    # success_msg = order.stdout.decode('GBK')
    # print(success_msg)
    # error_msg = order.stderr.decode('GBK')
    # print(error_msg)
    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('系统默认编码')

    5、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))

    6、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")

    7、xml模块

    xmltest.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>

     xml模块使用:

    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")
    import json
    # json.dumps() json.dump()
    # json.loads() json.loads()
    
    # json:json就是一种特殊格式的字符串
    # 格式要求:
    # 1.只能由{}和[]嵌套形成
    # 2.只能有一个根: 最外层要么是{}(推荐),要么是[]
    # 3.所以key都是字符串类型,且json字符串中所有字符串类型必须用""包裹
    # 4.json字符串中value类型可以为: number | boolean | null | 字符串 | dic | list
    dic = {'': [1, 3.14, True, None, "字符串"]}
    print(json.dumps(dic))
    
    j_str = """{"key": [1, 3.14, true, null, "字符串"]}"""
    print(json.loads(j_str))
    
    '''
    {
        "info": [1, 2, 3, 4, 5]
    }
    '''
    
    # xml格式数据:
    # 1.xml文件中都是由自定义标签嵌套形成,区分大小写
    # 2.只能有一个根标签:其他内容或标签都被该标签包裹
    # 3.标签名为key,标签中的值为value
    # 4.与json不同的是,xml标签可以额外添加属性来标识key的区分度
    xml | json
  • 相关阅读:
    数字重排
    环游世界
    Hibernate笔记(一)增删改查CRUD
    Sliding Window Algorithm 滑动窗口算法
    纯HTML/CSS/JS实现淘宝、京东两种轮播图
    COA计算机组织与结构笔记
    数据结构与算法笔记:最小生成树Kruskal、Prim算法与JAVA实现
    数据结构与算法笔记:图的基础与JAVA实现
    数据结构与算法:并查集
    JDBC学习笔记
  • 原文地址:https://www.cnblogs.com/zhouyongv5/p/10713427.html
Copyright © 2020-2023  润新知