zoukankan      html  css  js  c++  java
  • json os sys 摘要 collections

    1.序列化

    json

    1.dumps loads

    import json
    
    dumps 将对象转换成字符串(序列化)
    lst = [1,2,3,4,5]
    print(repr(json.dumps(lst)))
    # "[1,2,3,4,5]"
    
    loads 将字符串转换成对象(反序列化)
    str_lst = '[1, 2, 3, 4, 5]'
    lst = json.loads(str_lst)
    print(repr(lst))
    # [1,2,3,4,5]
    
    特例:
    dic = {"k1":"名字"}
    str_dic = json.dumps(dic)
    print(str_dic)
    # {"k1": "u540du5b57"}
    解决方法:
    dic = {"k1":"名字"}
    str_dic = json.dumps(dic,ensure_ascii=False)
    print(str_dic)
    # {"k1": "名字"}
    # 关闭ascii码
    

    2.dump load

    dump 将对象转换成字符串写入文件当中(序列化)
    import json
    lst = [1,2,3,4,5,6]
    with open("info","w",encoding="utf-8")as f:
        json.dump(lst,f)
    # info文件中写入一行[1,2,3,4,5,6]
    
    load 将文件中的字符串转换成对象(反序列化)
    import json
    lst = [1,2,3,4,5,6]
    with open("info","r",encoding="utf-8")as f:
        lst1 = json.load(f)
        print(lst1)
    # [1,2,3,4,5,6] 
    

    同时读取多个内容进行反序列

    with open("info","r",encoding="utf-8")
    for i in f:
        l = json.loads(i)
        print(l)
    

    pickle

    序列化(可对python所有对象进行转换)

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

    1.dumps loads

    对象转换成类似字节
    import pickle
    lst = [1,2,3,4,5]
    b_lst = pickle.dumps(lst)
    print(b_lst)
    # b'x80x03]qx00(Kx01Kx02Kx03Kx04Kx05e.'
    
    类似字节转换成对象
    import pickle
    lst = [1,2,3,4,5]
    b_lst = pickle.dumps(lst)
    t_lst = pickle.loads(b_lst)
    print(t_lst)
    # [1,2,3,4,5]
    

    2.dump load

    将对象转换成乱码写入对象
    import pickle 
    dic = {"user":"baoyuan"}
    pickle.dump(dic,open("info","wb"))
    # �}q X   userqX   baoyuanqs.
    
    将乱码转换成对象输出
    import pickle 
    dic = {"user":"baoyuan"}
    pickle.dump(dic,open("info","wb"))
    print(pickle.load(open("info","rb")))
    # {'user': 'baoyuan'}
    

    对象转换成乱码多行写入

    import pickle
    dic = {"1":2}
    with open("info","wb")as f:
        s = "
    ".encode("utf-8")
        f.write(pickle.dumps(dic) + s)
        f.write(pickle.dumps(dic) + s)
        f.write(pickle.dumps(dic) + s)
    

    乱码转换对象全部读取

    import pickle
    dic = {"1":2}
    with open("info","wb")as f:
        s = "
    ".encode("utf-8")
        f.write(pickle.dumps(dic) + s)
        f.write(pickle.dumps(dic) + s)
        f.write(pickle.dumps(dic) + s)
    
    f1 = open("info","rb")
    for i in f1:
        print(pickle.loads(i))
    

    总结:

    1.推荐使用json

    2.json是各种语言通用的

    3.pickle是python私有的

    2.os

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

    1.工作目录

    当前工作路径
    print(os.getcwd())
    
    路径切换
    os.chdir(r"D:pycharm demo123")
    
    当前目录
    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())
    

    3.文件

    import os
    
    修改名字
    os.rename("123","info")
    
    删除文件
    os.remove("info")
    

    4.路径

    import os
    
    通过相对路径获取绝对路径
    print(os.path.abspath("info"))
    
    将路径以最后一个""切割(路径,文件名)
    print(os.path.split(os.path.abspath("info")))
    
    获取路径
    print(os.path.dirname("D:pycharm demoinfo"))
                          
    获取文件名
    print(os.path.basename("D:pycharm demoinfo"))
    
    判断路径是否存在
    print(os.path.exists("D:pycharm demoinfo"))
    
    判断是不是路径
    print(os.path.isdir(r"D:pycharm demo"))
    
    判断是不是文件名
    print(os.path.isfile("info"))
    
    判断是不是绝对路径
    print(os.path.isabs("D:pycharm demoinfo"))
    
    路径拼接
    print(os.path.join("D:\","pycharm demo","info"))
    
    文件最后修改的时间(返回时间戳)
    print(os.path.getatime("D:pycharm demoinfo"))
    
    文件最后的访问时间(返回时间戳)
    print(os.path.getctime("D:pycharm demoinfo"))
    print(os.path.getmtime("D:pycharm demoinfo"))
    
    获取当前文件的大小(返回字节b)
    print(os.path.getsize("D:pycharm demo代码练习.py"))
    

    3.sys

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

    import sys
    
    脚本本身,当前文件运行(返回一个绝对路径)
    print(sys.argv)
    
    退出程序,正常退出时exit(0),错误退出sys.exit(1)
    print(sys.exit(n))
    
    获取解释器版本
    print(sys.version)
    
    添加自定义模块查找路径
    print(sys.path)
    
    区分操作系统然后进行相关逻辑操作
    print(sys.platform)
    

    4.加密

    hashlib 加密和校验

    加密

    alex:alex123
    加密后:alex:23lw23jky321jh4gqyt1234gj8b7t
    {"1234":23lw23jky321jh4gqyt1234gj8b7t}
    

    常用的加密

    md5,sha1,sha256,sha512

    1.只要明文相同密文就是相同的

    2.只要明文不相同密文就是不相同的

    3.不能反逆(不能解密) -- md5中国人破解了

    加密过程:

    1.加密的内容

    2.将要加密的内容转成字节

    示例:

    md5示例:
    import hashlib
    md5 = hashlib.md5()
    md5.update("alex123".encode("utf-8"))
    print(md5.hexdigest())
    
    sha1示例:
    import hashlib
    sha1 = hashlib.sha1()
    sha1.update("alex123".encode("utf-8"))
    print(sha1.hexdigest())
    
    最常用的是md5但是被中国人破解
    平时加密的时候使用sha1
    

    加盐(二次加密)

    加固定盐

    import hashlib
    md5 = hashlib.md5("alex".encode("utf-8"))
    md5.update("wusir".encode("utf-8"))
    print(md5.hexdigest())
    

    动态加盐

    user = input("user")
    pwd = input("pwd")
    import hashlib
    md5 = hashlib.md5(user.encode("utf-8"))
    md5.update(pwd.encode("utf-8"))
    print(md5.hexdigest())
    

    tips

    import hashlib
    ss = "baoyuanwusirtaibai"
    s = "baoyuan"
    s1 = "wusir"
    s2 = "taibai"
    md5 = hashlib.md5()
    md5.update(ss.encode("utf-8"))
    print(md5.hexdigest())
    
    import hashlib
    ss = "baoyuanwusirtaibai"
    s = "baoyuan"
    s1 = "wusir"
    s2 = "taibai"
    md5 = hashlib.md5()
    md5.update(s.encode("utf-8"))
    md5.update(s1.encode("utf-8"))
    md5.update(s2.encode("utf-8"))
    print(md5.hexdigest())
    # 拼接加密 和 分解加密 的加密结果一样
    

    5.collections

    1.namedtuple

    # 生成可以使用名字来访问元素内容的tuple
    from collections import namedtuple
    point = namedtuple("tu",["a","b","c"])     # 第一个参数是元组的名字,第二参数是元组中元素的[名字,名字]
    p = point({"key":(1,2,3,4)},20,10)
    print(p)
    # tu(a={'key': (1, 2, 3, 4)}, b=20, c=10)
    

    2.deque

    # 双端队列,可以快速的从另外一端追加和推出对象
    from collections import deque
    lst = deque([1,2,3,4,5,6])
    lst.append(8)
    lst.appendleft(0)
    print(lst)
    # deque([0,1,2,3,4,5,6,8])
    
    lst = deque([1,2,3,4,5,6])
    lst.pop()
    lst.popleft()
    print(lst)
    # deque([2,3,4,5])
    
    # 队列:先进先出
    # 栈:先进后出 -- 栈顶
    

    3.counter

    c = Counter('abcdeabcdabcaba')
    print(c)
    # Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
    

    4.orderedDict

    有序字典,python3.6以上默认有序

    5.defaultdict

    from collections import defaultdict
    dic = defaultdict(list)
    dic["k1"].append(12)
    print(dic)
    # defaultdict(<class 'list'>, {'k1': [12]})
    
  • 相关阅读:
    Joint Consensus两阶段成员变更的单步实现
    深度干货|云原生分布式数据库 PolarDBX 的技术演进
    SpringMVC框架入门配置 IDEA下搭建Maven项目
    windows安装composer方法和使用方法
    idea2016 spring 新手上路
    jQuery 获取 attr() 与 prop() 属性值的方法及区别介绍 _fei
    处女座的看过来【 JetBrains强迫症】注释篇
    phpstorm 配置 xdebug调试工具
    使用Intellij IDEA整合Spring+Spring MVC+MyBitis
    长链剖分小记
  • 原文地址:https://www.cnblogs.com/beichen123/p/11254184.html
Copyright © 2011-2022 走看看