• 22 序列化


    序列化
    一.pickle
    以bytes 形式操作
    pickle.dumps(obj) #打碎 得到了btyes 类型
    pickle.loads(pickle.dumps(obj)) #转化对象(该对象的类必须存在)

    f=open("filename","ab")
    pickle.dump(obj,f) #往文件中一个一个存对象

    f=open("filename","rb")
    pickle.load(f) #一个一个获取对象
    import pickle
    class Cat:
        def __init__(self,name,color):
            self.name=name
            self.color=color
        def chi(self):
            print("%s会吃老鼠"%self.name)
    
    # c1=Cat("汪峰1","黑色")
    # c2=Cat("汪峰2","黑色")
    # c3=Cat("汪峰3","黑色")
    # c4=Cat("汪峰4","黑色")
    # bs=pickle.dumps(c)
    # print(bs)
    # cc=pickle.loads(bs)
    # cc.chi()
    # print(cc.name)
    # print(cc.color)
    
    # pickle.dump(c1,open("cat.dat","wb"))  #将对象以bytes类型写入到文件
    # b=pickle.load(open("cat.dat","rb")) #将文件的内容读取
    # print(b.name)
    # b.chi()
    # lst=[c1,c2,c3,c4]
    # pickle.dump(lst,open('cat.dat',"wb"))
    lst=pickle.load(open('cat.dat',"rb"))
    for cat in lst:
        cat.chi()
    pickle

    二.shelve 相当文件字典
    注意点:
    1.d=shelve("filename") #filename 要存入的文件名
    d['name']="deng" #设置属性
    d.close()

    2.如何要修改下一层字典中的属性的话,需要:
    d=shelve("filename",writeback=True) # writeback=True 表示回写
    d["liu"]={'wf':"zhang","age":23} #设置熟悉
    d["liu"]["wf"]="tao" #修改内层字典的属性
    import shelve
    
    # d = shelve.open("sylar") # 文件类型的字典
    # d['wf'] = "汪峰"
    # d.close()
    #
    # d = shelve.open("sylar")
    # print(d['wf'])
    # d.close()
    
    # d = shelve.open("sylar") # 文件类型的字典
    # d['wf'] = {"name":"汪峰", "age": 18, "wife":{"name":"章子怡", "hobby":"拍电影"}}
    # d.close()
    
    # d = shelve.open("sylar", writeback=True) # 文件类型的字典 wirteback把修改的内容自动的回写到文件中
    # d['wf']['wife']['hobby'] = "当导师" # 改
    # d.close()
    
    # d = shelve.open("sylar") # 文件类型的字典
    # print(d['wf'])
    # d.close()
    
    
    d = shelve.open("sylar")
    for k, v in d.items():
        print(k, v)
    print(type(d))
    shelve

    三.configparser 操作ini 文件
    import configparser  #配置文件
    # con=configparser.ConfigParser()  #创建对象
    # con["DEFAULT"]={
    #     "name":"腾讯木马",
    #     "time":'腾讯更新时间',
    #     "version":"1.0"
    # }
    # con["SERVER_1"]={
    #     "IP":"192.168.1.123",
    #     "port":"10068"
    # }
    # con["SERVER_2"]={
    #     "IP":"192.168.1.134",
    #     "port":"10078"
    # }
    # con["SERVER_3"]={
    #     "IP":"192.168.1.127",
    #     "port":"10069"
    # }
    # #写入到文件
    # con.write(open("qq.ini","w",encoding="utf-8"))
    
    
    #读取文件中的内容
    con=configparser.ConfigParser() #创对象
    con.read("qq.ini",encoding="utf-8")
    # print(con["SERVER_1"])
    # print(con["SERVER_1"]["name"])
    # for el in con["SERVER_1"]:
    #     print(el)
    #
    print(con.options("SERVER_1")) #列表的形式返回该章节下的所有key 包括第一个对象默认的key
    
    #增删改
    
    #增加章节
    con.add_section("SERVER_4")
    con["SERVER_4"]={
        "IP":"196.168.11",
        "port":"10234"
    }
    
    #修改
    con.set("SERVER_1","IP","192.168.100000")
    print(con["SERVER_1"]["IP"])
    
    #删除章节
    con.remove_section("SERVER_3")
    
    #删除元素
    con.remove_option("SERVER_2","port")
    
    #写回文件
    con.write(open("qq.ini","w",encoding="utf-8"))
    configparser
    import configparser
    
    config = configparser.ConfigParser() # 创建对象
    
    config['DEFAULT'] = {  # 特殊
        "name":"腾讯qq木马",
        "time":"qq更新时间",
        "version":"1.0"
    }
    config['SERVER_1'] = {
        "IP":"192.168.1.123",
        "port":"12306"
    }
    config['SERVER_2'] = {
        "IP":"192.168.1.178",
        "port":"12311"
    }
    config['SERVER_3'] = {
        "IP":"192.168.1.176",
        "port":"12312"
    }
    
    # 写入到文件
    config.write(open("qq.ini", mode="w", encoding="utf-8")) #操作ini 文件
    #
    #
    # # 读取内容
    # config = configparser.ConfigParser()
    # # 读取内容
    # config.read("qq.ini", encoding="utf-8") # 此时我们把文件中的内容读取到config
    # print(config['SERVER_1']['IP']) # 字典
    # print(config['SERVER_2']['name'])
    # print(config.get("SERVER_3", "IP")) # 字典
    #
    # for k, v in config['DEFAULT'].items():
    #     print(k, v)
    
    # config = configparser.ConfigParser()
    # # 读取内容
    # config.read("qq.ini", encoding="utf-8") # 此时我们把文件中的内容读取到config
    # config['SERVER_1']['NAME'] = "哈哈哈"
    # config.write(open("qq.ini", mode="w", encoding="utf-8"))
    configparser2

    四.json
    1.
    json.dumps(dic,ensure_ascii=False) #ensure_ascii 默认ascii,显示中文需要 设置为false
    json.loads(json字符串) 将json字符串转化为字典

    对象转化成json字符串 两种方式
    class Person:
    def __init__(self,name,age):
    self.name=name
    self.age=age
    p=Person("刘德华",23)

    将对象 p 转化成json
    方案一:
    s=json.dumps(p.__dict__)

    方案二:
    def func(obj): #自定义 函数得到所需要的字符串字典格式 ,穿
    return {"name":obj.name,"age":obj.age}
    s=json.dumps(p,default=func,ensure_ascii=False)

    将json对象还原回对象
    s='{"name": "刘能", "age": 12}'
    def func(dic):
    return Person(dic["name"],dic["age"])

    p=json.loads(s,object_hook=func)

    2.json 写文件,读文件相关
    1.写入文件:
    dic={"name":"汪峰","age":123,"hobby":{"体育":'a','书':"射雕"}}
    f=open("userinfo","w",encoding="utf-8")
    json.dump(dic,f,ensure_ascii=Flase,indent=4) #写入文件,indent缩进为4个字符

    2.文件中读取
    f=open("userinfo","r",encoding="utf-8")
    dic=json.load(f)

    3.重点:(用的最多)
    1.字典以json字符串的格式,循环一行一行写入文件
    lst=[dic1,dic2,dic3]
    for dic in lst:
    s=json.dumps(dic,ensure_ascii=False)
    f.write(s+" ")
    2.for line in f: 一行行读取文件,得到dic=json.loads(line.strip())
    import  json
    
    # # 准备一个字典
    # dic = {"a": "小萝莉", "b": "大萝莉", "c": "猥琐大叔", "d": False, "e": None}
    # # python中可以直接把字典或者列表转化成json
    # s = json.dumps(dic, ensure_ascii=False)  # pickle
    # print(type(s))
    # print(s)
    
    # s = '{"a": "小萝莉", "b": "大萝莉", "c": "猥琐大叔", "d": false, "e": null}'
    # d = json.loads(s) # 把json转化成字典
    # print(d)
    # print(type(d))
    
    
    
    # dic = {"a": "小萝莉", "b": "大萝莉", "c": "猥琐大叔", "d": False, "e": None, "wf":{"name":"半壁江山", "hobby":"皮裤"}}
    # f = open("sylar.json", mode="w", encoding="utf-8")
    # json.dump(dic, f, ensure_ascii=False, indent=4) # 4个空格 = 1个tab
    #
    # f = open("sylar.json", mode="r", encoding="utf-8")
    # d = json.load(f)
    # print(d)
    
    # class Person:
    #     def __init__(self, firstName, lastName):
    #         self.firstName = firstName
    #         self.lastName = lastName
    #
    # s = '{"firstName": "尼古拉斯", "lastName": "刘能"}'
    # def func(dic):
    #     return Person(dic['firstName'], dic["lastName"])
    #
    # p = json.loads(s, object_hook=func) # 通过函数func把字典转换回对象
    # print(p.firstName, p.lastName)
    
    
    # p = Person("尼古拉斯", "刘能")
    # 把对象转换成json
    # s = json.dumps(p.__dict__, ensure_ascii=False) # 方案一, 转的是字典
    # def func(obj):
    #     return {
    #         "firstName": obj.firstName,
    #         "lastName": obj.lastName
    #     }
    # s = json.dumps(p, default=func, ensure_ascii=False) # 方案二 转化的也是字典
    # print(s)
    
    dic1 = {"name":'毒液', "评分": "0.9"}
    dic2 = {"name":'与神同行', "评分": "10"}
    dic3 = {"name":'看不见的客人', "评分": "9.5"}
    
    # lst = [dic1, dic2, dic3]
    # f = open("movie.json", mode="w", encoding="utf-8")
    # for d in lst:
    #     s = json.dumps(d, ensure_ascii=False)
    #     f.write(s+"
    ")
    
    # f = open("movie.json", mode="r", encoding="utf-8")
    # dic1 = json.load(f) # 当json文件中保存多个json的时候不能一次性全部都读取出来
    # print(dic1)
    
    f = open("movie.json", mode="r", encoding="utf-8")
    for line in f:
        line = line.strip()
        if line == "":
            continue
        else:
            d = json.loads(line) # 一行一行的处理
            print(d)
    json


  • 相关阅读:
    Markdown简单介绍和基本的语法
    Unsupported major.minor version 51.0问题的解决
    Android高级控件(一)——ListView绑定CheckBox实现全选,添加和删除等功能
    kqueue演示样例
    华为离职副总裁徐家骏的工作感悟
    菜鸟之路-浅谈设计模式之单例设计模式
    【gsl】生成随机数
    【C语言】pragma
    【数据结构】二叉堆
    【编程题目】查找最小的 k 个元素
  • 原文地址:https://www.cnblogs.com/knighterrant/p/9966178.html
Copyright © 2020-2023  润新知