• Day23--Python--常用模块02--序列化,configparser


    1. 序列化
    把对象打散成bytes或者字符串。 方便存储和传输 序列化
    把bytes或者字符串转换回对象。 反序列化

    2. pickle(比较重要)
    把python中所有的对象都可以转化成bytes。进行存储和传输
    dumps() 序列化。 写在内存中,不写文件.
    loads() 反序列化, 从内存中读,不读文件.
    dump()
    load()
    # dumps()序列化, loads() 反序列化

    import
    pickle # dumps 序列化。 把对象转化成bytes # loads 反序列化。 把bytes转化成对象 # dump 序列化。 把对象转化成bytes并写入文件 # load 反序列化。把文件中的bytes读取。转化成对象 class Cat: def __init__(self, name, age): self.name = name self.age = age def catchMouse(self): print(self.name, self.age, "抓老鼠") c = Cat("jerry", 18) c.catchMouse() # dumps 把对象转化成bytes 序列化 bs = pickle.dumps(c) print(bs) # 把bytes 转换回对象 反序列化 ccc = pickle.loads(bs) ccc.catchMouse()
    dic = {"jay": "周杰伦", "jj": "大阳哥"}
    bs = pickle.dumps(dic)
    print(bs)
    
    d = pickle.loads(bs)
    print(d)
    View Code  dumps()& loads()
    # dump()序列化写入文件, load()序列化从文件读取

    import
    pickle class Cat: def __init__(self, name, age): self.name = name self.age = age def catchMouse(self): print(self.name, self.age, "抓老鼠") c = Cat("jerry", 18) f = open("pickle-test", mode="wb") pickle.dump(c, f) # 结果人是看不了的。 f.close() f = open("pickle-test", mode="rb") c = pickle.load(f) c.catchMouse() f.close()
    import pickle
    class Cat:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    lst = [Cat('猫1', 10), Cat('猫2', 9), Cat('猫3', 0), Cat('猫4', 7), Cat('猫5', 6)]
    f = open('pickle-test', mode='wb')
    for el in lst:
        pickle.dump(el, f)
    
    f.flush()
    f.close()
    f = open('pickle-test', mode='rb')
    
    while 1:
        try:
            c = pickle.load(f)    # 迭代着拿
            print(c.name)
        except EOFError:
            break
    import pickle
    class Cat:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    lst = [Cat('猫1', 10), Cat('猫2', 9), Cat('猫3', 0), Cat('猫4', 7), Cat('猫5', 6)]
    # f = open('pickle-test', mode='wb')
    # pickle.dump(lst, f)  # 知道列表长度不是很长,可以直接装进去
    
    f = open('pickle-test', mode='rb')
    lst1 = pickle.load(f)
    for i in range(0, len(lst1)):
        print(lst1[i].name)
    
    f.close()

    3. shelve
    小型数据库. 操纵的是文件类型的字典.
    shelve.open(文件, writeback=True)
    import shelve
    # 打开一个文件
    f = shelve.open('阿拉斯加', writeback=True)
    f['jj'] = '林俊杰'        # f = {}  # 像字典一样操作
    f['jay'] = '周杰伦'
    
    print(f['jay'])
    
    f['jay'] = {'name': '周杰伦', 'age': 18, 'hobby': '唱歌'}  # 如果不加writeback=True则只能在内存层面修改,不能修改文件
    print(f['jay'])
    f['jay']['name'] = '风火轮'
    print(f['jay'])
    f.close()
    # 像字典一样使用
    import shelve
    f = shelve.open('阿拉斯加')
    print(f.keys())
    for k in f.keys():
        print(k)
    
    for k in f:
        print(k)
    
    for k, v in f.items():
        print(k, v)
    
    f.close()

    4. json(重点)
    前后端数据交互的通用的数据格式。
    dumps() 把字典转化成字符串
    loads() 把字符转化成字典
       dump(s, f) 在写入文件的时候, 必须用双引号 "", 不能识别单引号''
    load(f)

    处理中文
    ensure_ascii = False
    import json
    dic = {'a': '李茶的姑妈', 'b': '巨齿鲨', 'c': '看不见的客人'}
    s = json.dumps(dic)     # 如果你的key或者value超出了ascii范畴。 就会显示成uxxxxx
    print(s)
    s1 = json.dumps(dic, ensure_ascii=False)    # 干掉ascii码
    print(s1)
    print(repr(s1), type(s))  # 使用repr便于区分s1的类型是字典还是字符串
    
    # 把字符串解析成 字典
    dic1 = json.loads(s)
    dic2 = json.loads(s1)
    print(dic1, type(dic1))
    print(dic2, type(dic2))
    # json.dump() 和 json.load()
    
    import json
    # 写入
    dic = {"a": '李茶的姑妈', "b": "找到你", "c": "看不见的客人"}
    f = open('waimai.json', mode='w', encoding='utf-8')
    json.dump(dic, f, ensure_ascii=False)      # 缺点: 放入字典时不会换行
    f.close()
    
    # 读出
    f = open('waimai.json', mode='r', encoding='utf-8')
    s = json.load(f)  # 把文件中的json串读取成字典
    print(s, type(s))
    f.close()
    import json
    lst = [{"a": "胡辣汤"},{"b":"吱吱冒油的大猪蹄子"},{"c": "盖浇饭"},{"d":"马拉"},{"e":"法国大蜗牛"}]
    f = open("menu.json", mode="w", encoding="utf-8")
    for dic in lst:
        json.dump(dic, f, ensure_ascii=False)
    f.close()
    
    f = open("menu.json", mode="r", encoding="utf-8")
    s = json.load(f)
    print(s)    # 报错 json.dump()不能换行, 所以json只建议使用dumps & loads()
    # 写入的时候
    # 1. 循环
    # 2. 用dumps把字典转化成字符串, 然后手工在后面加一个
    
    # 3. 写出
    f = open("new_menu.json", mode="w", encoding="utf-8")
    lst = [{"a": "胡辣汤"},{"b":"吱吱冒油的大猪蹄子"},{"c": "盖浇饭"},{"d":"马拉"},{"e":"法国大蜗牛"}]
    for el in lst:
        s = json.dumps(el, ensure_ascii=False) + "
    "
        f.write(s)
    
    f.flush()
    f.close()
    
    
    # 读取的时候
    # 1. for line in f:
    # 2. strip()去掉空白
    # 3. loads()变成字典
    
    f = open("new_menu.json", mode="r", encoding="utf-8")
    for line in f:
        line = line.strip()
        dic = json.loads(line)
        print(dic)

    5. configparser
    处理配置文件的。
    把配置文件作为一个大字典来处理就型了
    import configparser
    
    conf = configparser.ConfigParser()
    conf["DEFAULT"] = {
        "session-time-out": 30,
        "user-alive": 60,
        "connect-alive": 10
    }
    
    
    
    conf["189-DB"] = {
        "ip": "189.135.63.12",
        "port": 3306,
        "uname": "root",
        "password": "root"
    }
    
    
    conf["166-DB"] = {
        "ip": "189.135.63.12",
        "port": 3306,
        "uname": "root",
        "password": "root"
    }
    
    
    conf["163-DB"] = {
        "ip": "189.135.63.12",
        "port": 3306,
        "uname": "root",
        "password": "root"
    }
    
    f = open("db.ini", mode="w")
    conf.write(f) # 把文件扔进去。 写到这个文件里
    
    f.close()
    import configparser
    
    # 读取内容
    conf = configparser.ConfigParser()
    conf.read("db.ini")
    print(conf.sections()) # 获取到章节 keys()
    print(conf['166-DB']["ip"])  # 可以像字典一样操作
    print(conf["166-DB"]["port"])
    print(conf["166-DB"]["uname"])
    print(conf["166-DB"]["password"])
    
    for key in conf['163-DB']:
        print(key)
    
    for key, value in conf['163-DB'].items():
        print(key, value)
    import configparser
    
    # 增删改操作
    conf = configparser.ConfigParser()
    conf.read("db.ini") # 读取出来
    
    conf['163-DB']['uname'] = "alex"
    # del conf['163-DB']["password"]
    conf.set("163-DB", "wangermazi", "189") # setattr
    
    conf.add_section("jay")
    conf.write(open("db.ini", mode="w"))
  • 相关阅读:
    1022 D进制的A+B
    1021 个位数统计
    L1-040 最佳情侣身高差
    Celery--基本使用
    Celery--安装
    Celery--简介
    RabbitMQ--常用命令
    RabbitMQ--RPC实现
    RabbitMQ发布订阅
    RabbitMQ基本使用
  • 原文地址:https://www.cnblogs.com/surasun/p/9760534.html
Copyright © 2020-2023  润新知