zoukankan      html  css  js  c++  java
  • python常用模块2(序列化,pickle,shelve,json,configparser)

    在我们存储数据或者网络传输数据的时候. 需要对我们的对象进行处理. 把对象处理成方便存储和传输的数据格式. 这个过程叫序列化. 不同的序列化, 结果也不同. 但是目的是⼀样的. 都是为了存储和传输.

     

    在Python中有三种序列化的方案:

    一.pickle

    把任意类型数据转化成bytes并写入到文件中.同样也可以把文件中写好的bytes转换回python的数据,后面的,这个过程被称为反序列化.

     

    序列化并写入文件中,再读取

    import pickle
    class Cat: def __init__(self,name,age): self.name=name self.age=age def catMouse(self): print(self.name,"抓老鼠") c = Cat("maomi",3) bs = pickle.dumps(c) #序列化一个对象,得到一堆二进制数据给机器看的 print(bs)
    #b'x80x03c__main__
    Cat
    qx00)x81qx01}qx02(Xx04x00x00x00nameqx03Xx05x00x00x00maomiqx04Xx03x00x00x00ageqx05Kx03ub.'
    
    f
    = open("cat",mode="wb") pickle.dump(c,f) #写入到cat文件中 f.close()

     f = open("cat", mode="rb")
       cc = pickle.load(f) # 从文件中读取对象<__main__.Cat object at 0x000001F1DA5E7CC0>
       cc.catMouse()    #maomi 抓老鼠

     

    二. shelve

    能够把数据写到硬盘上,操作shleve很像操作一个字典.

    import shelve

    str = shelve.open("ccj", writeback=True)
    del s['jay']
    s.close()

     

    三.json

     

    json全称javascript object notation. 翻译过来叫js对象简谱.json是我们前后端交互的枢纽.,相当于编程界的普通话.

    json.dumps(dic)

     

    import json
    dic = {"a": "女王", "b": "萝莉", "c": "小清新","d":None}
    j=json.dumps(dic,ensure_ascii=False) #把字典转化成json字符串
    print(j) # {"a": "女王", "b": "萝莉", "c": "小清新", "d": null}

     

    把前端传递过来的json字符串转化成字典.

    import json
    s2 = '{"a": "女王", "b": "萝莉", "c": "小清新", "d": null}'
    dic2 = json.loads(s2)
    print(type(dic2), dic2)
    #<class 'dict'> {'a': '女王', 'b': '萝莉', 'c': '小清新', 'd': None}

     

     四.configgparser

    该模块适用于配置文件的格式与windows ini⽂件类似,可以包含⼀个或多个节(section)每个节可以有多个参数(键=值).

     用configparser就可以对这样的文件进行处理理.首先, 是初始化.

    import configparser
    config = configparser.ConfigParser()
    config['DEFAULT'] = {
        "sleep": 1000,
        "session-time-out": 30,
        "user-alive": 999999
    }
    config['TEST-DB'] = {
        "db_ip": "192.168.17.189",
        "port": "3306",
        "u_name": "root",
        "u_pwd": "123456"
    }
    config['168-DB'] = {
        "db_ip": "152.163.18.168",
        "port": "3306",
        "u_name": "root",
        "u_pwd": "123456"
    }
    config['173-DB'] = {
        "db_ip": "152.163.18.173",
        "port": "3306",
        "u_name": "root",
        "u_pwd": "123456"
    }
    f = open("db.ini", mode="w")
    config.write(f) # 写⼊文件
    f.flush()
    f.close()
    
    读取文件信息:
    config = configparser.ConfigParser()
    config.read("db.ini") # 读取文件
    print(config.sections()) # 获取到section. 章节...DEFAULT是给每个章节都配备的信息
    print(config.get("DEFAULT", "SESSION-TIME-OUT")) 
    # 从xxx章节中读取到xxx信息
    # 也可以像字典⼀样操作
    print(config["TEST-DB"]['DB_IP'])
    print(config["173-DB"]["db_ip"])
    for k in config['168-DB']:
    print(k)
    for k, v in config["168-DB"].items():
    print(k, v)
    print(config.options('168-DB')) # 同for循环,找到'168-DB'下所有键
    print(config.items('168-DB')) #找到'168-DB'下所有键值对
    print(config.get('168-DB','db_ip')) 
    # 152.163.18.168 get方法Section下的key对应的value
    
    增删改操作:
    # 先读取. 然后修改. 最后写回文件
    config = configparser.ConfigParser()
    config.read("db.ini") # 读取文件
    # 添加⼀个章节
    # config.add_section("189-DB")
    # config["189-DB"] = {
    # "db_ip": "167.76.22.189",
    # "port": "3306",
    # "u_name": "root",
    # "u_pwd": "123456"
    # }
    # 修改信息
    config.set("168-DB", "db_ip", "10.10.10.168")
    # 删除章节
    config.remove_section("173-DB")
    # 删除元素信息
    config.remove_option("168-DB", "u_name")
    # 写回⽂文件
    config.write(open("db.ini", mode="w"))

     

     

     

     

     

  • 相关阅读:
    Linux中大括号{}的应用
    shell script编程(1)>>学生成绩管理系统
    不同版本的Linux防火墙关闭和开启
    shell script的执行方式区别
    包管理介绍(DPKG,APT,RPM,YUM,DNF)
    MBR与GPT,BIOS与UEFI..总结
    Windows10下安装Ubuntu的错误总结
    学生管理系统及票务管理系统总结
    python 3.x和python 2.x下的换行问题
    输出整数各位数字
  • 原文地址:https://www.cnblogs.com/chcj/p/9964672.html
Copyright © 2011-2022 走看看