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]})
    
  • 相关阅读:
    623. Add One Row to Tree 将一行添加到树中
    771. Jewels and Stones 珠宝和石头
    216. Combination Sum III 组合总数三
    384. Shuffle an Array 随机播放一个数组
    382. Linked List Random Node 链接列表随机节点
    向github项目push代码后,Jenkins实现其自动构建
    centos下安装Jenkins
    python提取批量文件内的指定内容
    批处理实现:批量为文件添加注释
    python抓取每期双色球中奖号码,用于分析
  • 原文地址:https://www.cnblogs.com/beichen123/p/11254184.html
Copyright © 2011-2022 走看看