• json,pickle,configparser,hashlib,subprocess


    json:

    序列化:把内存的数据类型转换成一个特定的格式内容,这种格式可以存储或者传输给其他平台

    内存中的数据 ----> 序列化 ----> 特定的格式(json,pickle)
    
    内存中的数据 <---- 反序列化 <----特定的格式(json,pickle)

    强调:

    1. 可用于存储,是一种专门的格式
    2. 可以跨平台数据交互,能被其他语言识别

    json强调:识别不了set,tuple

    1. json格式的字符串要用双引号表示
    2. 兼容所有是语言通用的数据类型,不能识别某一语言的所独有的类型
    import json
    # 序列化
    json_res=json.dumps([1,'aaa',True,False])
    # print(json_res,type(json_res)) # "[1, "aaa", true, false]"
    
    # 反序列化
    l=json.loads(json_res)
    print(l,type(l))
    import json
    
    # 序列化的结果写入文件的复杂方法
    json_res=json.dumps([1,'aaa',True,False])
    # print(json_res,type(json_res)) # "[1, "aaa", true, false]"
    with open('test.json',mode='wt',encoding='utf-8') as f:
        f.write(json_res)
    
    # 将序列化的结果写入文件的简单方法
    with open('test.json',mode='wt',encoding='utf-8') as f:
        json.dump([1,'aaa',True,False],f)
    
    
    # 从文件读取json格式的字符串进行反序列化操作的复杂方法
    with open('test.json',mode='rt',encoding='utf-8') as f:
        json_res=f.read()
        l=json.loads(json_res)
        print(l,type(l))
    
    # 从文件读取json格式的字符串进行反序列化操作的简单方法
    with open('test.json',mode='rt',encoding='utf-8') as f:
        l=json.load(f)
        print(l,type(l))

    pickle:

    import pickle
    res=pickle.dumps({1,2,3,4,5})
    print(res,type(res)) #得到一个二进制
    
    s=pickle.loads(res)
    print(s,type(s)) # 返回一个set

    configparser:

    import configparser
    
    config=configparser.ConfigParser()
    config.read('test.ini')
    
    # 1、获取sections
    print(config.sections())
    
    # 2、获取某一section下的所有options
    print(config.options('section1'))
    
    # 3、获取items
    print(config.items('section1'))
    
    # 4、获得section下的user
    res=config.get('section1','user')
    print(res,type(res))
    # 5、获得section下的age
    res=config.getint('section1','age')
    print(res,type(res))
    

    hashlib:

    1. hash的一类算法,该算法接受传入的内容,得到一串hash值
    2. hash值的特点:
      • 只要传入的内容一样,得到的hash值也是一样的
      • 不管传入的内容多大,只要hash算法不变,得到hash值的长度也是不变
      • 不能由hash值反推传入的内容(用于密码密文传输与验证)
    import hashlib
    
    m=hashlib.md5()
    m.update('hello'.encode('utf-8'))
    m.update('world'.encode('utf-8'))
    res=m.hexdigest() # 'helloworld'
    print(res)
    # 模拟撞库
    cryptograph='aee949757a2e698417463d47acac93df'
    import hashlib
    
    # 制作密码字段
    passwds=[
        'alex3714',
        'alex1313',
        'alex94139413',
        'alex123456',
        '123456alex',
        'a123lex',
    ]
    
    dic={}
    for p in passwds:
        res=hashlib.md5(p.encode('utf-8'))
        dic[p]=res.hexdigest()
    
    # 模拟撞库得到密码
    for k,v in dic.items():
        if v == cryptograph:
            print('撞库成功,明文密码是:%s' %k)
            break
    
    
    # 提升撞库的成本=>密码加盐
    import hashlib
    
    m=hashlib.md5()
    
    m.update('天王'.encode('utf-8'))
    m.update('alex3714'.encode('utf-8'))
    m.update('盖地虎'.encode('utf-8'))
    print(m.hexdigest())

    subprocess:

    import subprocess
    
    obj = subprocess.Popen('tasklist', shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,)
    print(obj)
    res = obj.stdout.read()
    print(res.decode('gbk'))
    err_res = obj.stderr.read()
    print(err_res.decode('gbk'))
  • 相关阅读:
    343. Integer Break
    338. Counting Bits
    322. Coin Change
    304. Range Sum Query 2D
    303. Range Sum Query
    221. Maximal Square
    213. House Robber II
    cf
    poj2478欧拉函数
    lightoj1138
  • 原文地址:https://www.cnblogs.com/zhenghuiwen/p/12607400.html
Copyright © 2020-2023  润新知