zoukankan      html  css  js  c++  java
  • day17——序列化、os、sys、hashlib、collections

    day17

    序列化

    json

    两组4个方法:

    1、dumps(序列化) —— loads(反序列)

    dumps(list):将对象转换成字符串

    loads(str):将字符串转换成对象

    • list——str——list
    • tuple——str——list(直接变成列表,两个结果都是列表[]括起来)
    • dict——str——dict
    • set不可序列化
    lit = [1,22,3,3,45]
    print(json.dumps(lit),type(json.dumps(lit)))
    str_lst = json.dumps(lit)
    lst = json.loads(str_lst)
    print(lst,type(lst))
    
    
    dic = {'username':'宝元'}
    # str_dic = json.dumps(dic)  # 序列化
    str_dic = json.dumps(dic,ensure_ascii=False)  # ensure_ascii=False 关闭ascii码
    print(str_dic,type(str_dic))
    dic1 = json.loads(str_dic)  # 反序列化
    print(dic1,type(dic1))
    
    2、dump —— load

    dump(list,文件名):将对象转换成字符串写入文件

    load(文件名):将文件中字符串转换成对象读出文件

    • list——str——list
    • tuple——str——list(直接变成列表,两个结果都是列表[]括起来)
    • dict——str——dict
    • set不可序列化
    import json
    dic = (1,2,3,4,5)
    with open("infoo","a",encoding="utf-8")as f:
        json.dump(dic, f)
    
    with open("infoo","r",encoding="utf-8")as f1:
        lst1 = json.load(f1)
        print(lst1,type(lst1))
    
    
    # 同时写多个内容 进行序列化
    lst = [1,2,3,4,56,]
    f = open("info","w",encoding="utf-8")
    f.write(json.dumps(lst) + "
    ")
    f.write(json.dumps(lst) + "
    ")
    f.write(json.dumps(lst) + "
    ")
    f.write(json.dumps(lst) + "
    ")
    f.write(json.dumps(lst) + "
    ")
    f.close()
    
    # 同时读多个内容进行反序列
    f1 = open("info","r",encoding="utf-8")
    for i in f1:
        l = json.loads(i)
        print(l)
    f1.close()
    

    pickle

    pickle——nb(python所有对象进行转换)

    python自带的(只有python可以用)

    两组4个方法

    1、dumps —— loads

    dumps:转换成类似字节的东西

    loads:转回来

    import pickle
    lst = [12,3,4,5,768]
    t_list = pickle.dumps(lst) # 转换成类似字节
    print(t_list)
    print(pickle.loads(t_list))
    
    dic = {"user":"郭宝元"}
    t_list = pickle.dumps(dic) # 转换成类似字节
    print(t_list)
    print(pickle.loads(t_list))
    
    import pickle
    def func():
        print(111)
    
    fun = pickle.dumps(func)
    print(fun)
    pickle.loads(fun)()
    
    2、dump —— load

    dump:转换成类似字节的东西写入文件

    load:转回来读出文件

    import pickle
    dic = {"usern":"baoyuian"}
    # dic = {"usern":"宝元"}
    pickle.dump(dic,open("info","wb"))
    print(pickle.load(open("info","rb")))
    
    import pickle
    dic = {"1":2}
    f = open("info","wb")
    s = "
    ".encode("utf-8")
    f.write(pickle.dumps(dic)+ s)
    f.write(pickle.dumps(dic)+ s)
    f.write(pickle.dumps(dic)+ s)
    f.close()
    
    f1 = open("info","rb")
    for i in f1:
        print(pickle.loads(i))
    

    推荐使用json

    json是各种语言通用的

    pickle(python私有)

    os模块

    os模块——程序员通过python向操作系统发送指令(与操作系统交互的接口)

    1、工作目录
    import os
    # print(os.getcwd())  # 查看当前工作路径  ***
    # os.chdir("D:python 笔记day09")  # 路径切换
    # print(os.curdir)  # 当前(.)
    # print(os.pardir)  # 父级(..)
    
    2、文件夹
    import os
    os.mkdir("ttt") # 创建一个文件夹  ***
    os.rmdir("ttt") # 删除一个文件夹  ***
    os.makedirs("ttt/sss/ddd/ee") # 递归创建文件夹  ***
    os.removedirs("ttt/sss/ddd/ee") # 递归删除文件夹  ***
    print(os.listdir(r"D:python 笔记day17")) # 把整个文件夹里面的文件以列表显示  ***
    
    3、文件
    import os
    os.rename("info","infoo") #  重命名文件/目录  ***
    os.remove()  # 删除一个文件  ***
    
    4、路径
    import os
    # print(os.path.abspath("infoo"))  # 通过相对路径获取绝对路径  ***
    # print(os.path.split(os.path.abspath("infoo")))  # 将路径以最后一个切割,结果(路径,文件名)
    # print(os.path.dirname(r"D:python 笔记day17\__init__.py"))  # 获取路径,结果(D:python 笔记day17) ***
    # print(os.path.exists(r"D:python 笔记day17\__init__.py")) # 判断这个路径是否存在  ***
    # print(os.path.isdir(r"D:python 笔记day17"))  # 判断是不是路径  ***
    # print(os.path.isfile("__init__.py")) # 判断是不是文件  ***
    # print(os.path.isabs("D:python 笔记day17\__init__.py"))  # 判断是不是绝对路径
    # print(os.path.join("D:\\","ttt","bbb"))  # 路径拼接  ****
    # import time
    # print(time.time())
    # print(os.path.getatime(r"F:s24day174 序列化.py"))      # 最后的修改时间
    # print(os.path.getctime(r"F:s24day174 序列化.py"))      # 最后的访问时间
    # print(os.path.getmtime(r"F:s24day174 序列化.py"))      # 最后的访问时间
    # print(os.path.getsize(r"F:s24day09"))                    # 获取当前文件的大小   ***
    

    sys模块

    sys——与python解释器交互的接口

    import sys
    # import sys
    # if sys.argv[-1] == "alex":
    #     print("dsb")
    # else:
    #     print("李业dsb")
    # print(sys.argv)  # *** 当前文件运行,结果:['D:/python 笔记/day17/sys模块.py']
    # print(exit(0或1))  # 退出程序,正常退出时exit(0),错误退出sys.exit(1)
    # print(sys.path)   # 添加自定义模块查找路径 ******
    # print(sys.platform)  # 区分操作系统然后进行相关逻辑操作 ***
    

    hashlib加密

    加密和校验

    md5算法(安全系数最低)、sha1、sha256、sha512

    最常用的是md5,平时加密的时候使用sha1

    加密:

    ​ 加密的内容

    ​ 将要加密的内容转成字节

    • 只要明文相同密文就是相同的
    • 只要明文不相同密文就是不相同的
    • 不能反逆(不能解密)——md5中国人破解了
    import hashlib
    md5 = hashlib.md5()
    md5.update("alex123".encode("utf-8"))
    print(md5.hexdigest())
    
    md5 = hashlib.md5()
    md5.update("alex123".encode("gbk"))
    print(md5.hexdigest())
    
    md5 = hashlib.sha1()
    md5.update("alex123".encode("utf-8"))
    print(md5.hexdigest())
    
    md5 = hashlib.sha256()
    md5.update("alex123".encode("utf-8"))
    print(md5.hexdigest())
    
    加盐

    固定加盐

    import hashlib
    md5 = hashlib.md5("常鑫".encode("utf-8"))
    md5.update("alex123".encode("utf-8"))
    print(md5.hexdigest())
    

    动态加盐

    user = input("username:")
    pwd = input("password:")
    
    import hashlib
    md5 = hashlib.md5(user.encode("utf-8"))
    md5.update(pwd.encode("utf-8"))
    print(md5.hexdigest())
    
    校验
    ss = "baoyuanalextaibai"
    import hashlib
    md5 = hashlib.md5()
    md5.update(ss.encode("utf-8"))
    print(md5.hexdigest())
    # 9b674a2402eb25b1ccd2106868bd1ee9
    
    import hashlib  # 节省内存
    s1 = "baoyuan"
    s2 = "alex"
    s3 = "taibai"
    md5 = hashlib.md5()
    md5.update(s1.encode("utf-8"))
    md5.update(s2.encode("utf-8"))
    md5.update(s3.encode("utf-8"))
    print(md5.hexdigest())
    # 9b674a2402eb25b1ccd2106868bd1ee9
    
    # f = open(r"F:s24day17python-3.6.6-amd64.exe","rb")
    # import hashlib
    # md5 = hashlib.md5()
    # md5.update(f.read())
    # print(md5.hexdigest())
    
    # f = open(r"F:s24day17python-3.6.6-amd64.exe","rb")
    # import hashlib
    # md5 = hashlib.md5()
    # while True:
    #     msg = f.read(1024)
    #     if msg:
    #         md5.update(msg)
    #     else:
    #         print(md5.hexdigest())
    #         break
    

    collections

    **Counter():计数器,主要用来计数 *******************

    from collections import Counter
    # s = [1,1,2,2,3,3]
    # s = (1,2,3,3,4,5,6,7,78)
    s = "1112233344aaa"
    print(dict(Counter(s)))  # ***
    # 结果是 {'1': 3, '2': 2, '3': 3, '4': 2, 'a': 3}
    # 统计元素出现的次数
    

    namedtuple():命名元组,生成可以使用名字来访问元素内容的tuple

    from collections import namedtuple,deque
    Point = namedtuple('tu',["a","b","c"]) # 第一个参数是元组的名字,第二参数是元组中元素的[名字,名字]
    p = Point({"keu":(1,2,3,4)}, 20,10)
    print(p)
    # 结果是:tu("a"="keu":(1,2,3,4)},"b"=20,"c"=10)
    

    deque():双端队列,可以快速的从另外一侧追加和推出对象

    # lst = deque([1,2,3,4,5,6,7])  # 先进先出
    # lst.append(8)  # 在最后追加
    # lst.appendleft(0)  # 在最前加
    # lst.pop()   # 删除最后的   
    # lst.popleft()   #删除最前的
    # print(lst[4])  # 还可以使用索引
    

    OrderedDict():有序字典

    >>> od = OrderedDict()
    >>> od['z'] = 1
    >>> od['y'] = 2
    >>> od['x'] = 3
    >>> od.keys() # 按照插入的Key的顺序返回
    ['z', 'y', 'x']
    
    

    defaultdict():带有默认值的字典

    # from collections import defaultdict
    # dic = defaultdict(list)
    # dic["k1"].append(12)
    # print(dic)
    
    # li = [11,22,33,44,55,77,88,99,90]
    # result = {"key1":[],"key2":[]}
    # result = {}
    # for row in li:
    #     if row > 66:
    #         if 'key1' not in result:
    #             result['key1'] = []
    #         result['key1'].append(row)
    #     else:
    #         if 'key2' not in result:
    #             result['key2'] = []
    #         result['key2'].append(row)
    # print(result)
    
    # from collections import defaultdict
    # dic = defaultdict(set)
    # li = [11,22,33,44,55,77,88,99,90]
    # for i in li:
    #     if i > 66:
    #         dic["k1"].add(i)
    #     else:
    #         dic["k2"].add(i)
    # print(dic)
    
    
  • 相关阅读:
    多线程之旅:避免死锁——简单的锁分级(锁排序)
    和我一起来学iOS(三)UIView及其子类(上)
    谈谈.NET中常见的内存泄露问题——GC、委托事件和弱引用
    和我一起来学iOS(二)iOS中的一些约定、模式与三种回调机制
    多线程之旅六——异步编程模式,自己实现IAsyncResult
    详解JavaScript中的函数与闭包
    和我一起来学iOS(一)ObjectC的语法
    浅谈SQL SERVER中的物理联接算法
    多线程之旅之三——Windows内核对象同步机制
    深入 聚集索引与非聚集索引(一)
  • 原文地址:https://www.cnblogs.com/NiceSnake/p/11284925.html
Copyright © 2011-2022 走看看