zoukankan      html  css  js  c++  java
  • day 020 常用模块02

    主要内容:

    • 什么是序列化
    • pickle
    • shelve
    • json
    • configparser(模块)

    一 序列化

    我们在存储数据或者网络传输数据的时候,需要对我们的对象进行处理,把对象处理成方便存储和

    传输的数据格式,这个就叫序列化   python中序列化有三种方案:

         1 pickle 

       2 sheelve

       3 json :  

    二 pickle  ( 可以将我们python中的任意数据类型转化成bytes并写入到⽂文件中.  同样也 可以把⽂文件中写好的bytes转换回我们python的数据. 这个过程被称为反序列列化 )

     这需要记住这四个东西:

              dumps 序列化。 把对象转化成bytes

              loads 反序列化。 把bytes转化成对

         dump 序列化。 把对象转化成bytes并写入文件

       load 反序列化。把文件中的bytes读取。转化成对象
      序列化 :
    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("阿萨德",'10')
    # c.catchMouse()
    
    # # dumps 把对象转化成bytes  序列化
    ab=pickle.dumps(c)  # 序列化一个对象
    print(ab)  # 看不懂的二进制
    
    # 把bytes 转换回对象  反序列化
    a=pickle.loads(ab)  #把二进制反序列列化成我们的对
    a.catchMouse()   # 猫依然是猫. 依然可以吃饭       阿萨德 10 吃饭

     怎么写入文件:

    dump 序列化。 把对象转化成bytes并写入文件
    #  load 反序列化。把文件中的bytes读取。转化成对象


    还用的上边那个对象
    # c
    =Cat("阿萨德",'10') # f = open("pickle-text", mode="wb") # 写入文件 # pickle.dump(c,f) # 看不懂的 # f = open("pickle-text", mode="rb") # 读取 文件 # a=pickle.load(f) #反序列化 # a.catchMouse() # 看得懂的 支持多个对象写出: lst = [Cat("猫1", 10), Cat("猫2", 9), Cat("猫3", 9), Cat("猫4", 9), Cat("猫5",9)] # f = open("pickle-text", mode="wb") # # a= pickle.dump(lst,f) # 这么写文件里乱 # for el in lst: # pickle.dump(el, f) # 这么写清楚 # f.flush() # f.close() f = open("pickle-text", mode="rb") while 1: try: c = pickle.load(f) c.catchMouse() # 结果为 猫1", 10 吃饭 至猫5
    except EOFError: break

        但是这样写并不够好. 因为读的时候. 并不能知道有多少对象要读. 这⾥里里记住, 不能⼀一⾏行行行行的读.  那真的要写入或者读取多个内容怎么办? 很简单. 装list⾥里里. 然后读取和写入都⽤用 list 

    # lst = [Cat("jerry", 19), Cat("tommy", 20), Cat("alpha", 21)]
    #
    # # f=open("pickle-text",mode="wb")
    # # pickle.dump(lst,f)
    #
    # f=open("pickle-text",mode="rb")
    # l1=pickle.load(f)
    # for el in l1:
    #     el.catchMouse()  # 结果 为 jerry 19 吃饭   
                     tommy 20 吃饭
                        alpha 21 吃饭

    三  shelve   (简单另类的一种序列化的方案. 有点儿类似后面我们学到的redis. 可以作为 一种小型的数据库来使⽤) 就是把数据写到硬盘上,在操作shelve的时候就像操作一个字典.

    import shelve
    
    shelf=shelve.open("asd")
    shelf["jad"]="Lisa"
    print(shelf['jad'])
    shelf.close()
    
    s = shelve.open("asd")
    s["jay"] = {"name":"周杰伦", "age":18, "hobby":"哄小孩"}
    print(s['jay'])
    s.close()
    
    s = shelve.open("asd", writeback=True)  # 这个鬼东西可以帮我们动态改变信息并写到文件中
    #                                           这个鬼东西换可以帮我们删除数据 就像字典一样
    s['jay']['name'] = "胡辣汤"    # 尝试改变字典中的数据
    s.close()
    s = shelve.open("asd")
    print(s['jay']) #  改变了
    s.close()
    
    
    s = shelve.open("asd")
    # for k in s: # 像字典一样遍历
      # print(k)
    # print(s.keys()) # 拿到所有key的集合
    for k in s.keys():
      print(k)
    for k, v in s.items():  # 像字典⼀样操作
        print(k, v)
    s.close()

            综上shelve就当成字典来用就⾏

    四  json( 将python中常见的字典, 列表转化成字符串. 是目前后端数据交互使用频率 最高的一种数据格式.)全称 javascript object notatio

    # dic={"a":'女王','b':';萝莉','c':'小清新'}
    # s=json.dumps(dic,ensure_ascii=False) # 把 字典转化成json字符串
    # print(s,type(s))
    
    # ensure_ascii=False 这个鬼东西可以处理中文
    #
    # s = '{"a": "女王", "b": "萝莉", "c": "小清新"}'
    # dic=json.loads(s)  # 把前端传递过来的json字符串转化成字典
    # print(dic,type(dic))
    
    
    
    
    # json也可以像pickle一样吧序列化的结果写到文件中
    # dic = {"a": "女王", "b": "萝莉", "c": "小清新"}
    # f=open('text.json',mode='w',encoding="utf-8")  #  把对象打散成json写到文件中
    # json.dump(dic,f,ensure_ascii=False)
    # f.close()
    
    #读取 文件中的json
    # f=open('text.json',mode='r',encoding="utf-8")
    # dic=json.load(f)  #  读取json里的对象
    # f.close()
    # print(dic)

     我们可以向同⼀个文件中写入多个json串

    写入的时候
    # 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)

    五 configparser 

    ConfigParser模块在python中是用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section),每个节可以有多个参数(键=值)。使用的配置文件的好处就是不用再程序中硬编码,可以是你的程序变得灵活起来。
    注意:在python 3 中ConfigParser模块名已更名为configparser

    函数  

    读取配置文件:

    • read(filename) 直接读取ini文件内容
    • sections() 得到所有的section,并以列表的形式返回
    • options(section) 得到该section的所有option
    • items(section) 得到该section的所有键值对
    • get(section,option) 得到section中option的值,返回为string类型
    • getint(section,option) 得到section中option的值,返回为int类型
    • getfloat(section,option)得到section中option的值,返回为float类型
    • getboolean(section, option)得到section中option的值,返回为boolean类型

    写入配置文件

    • add_section(section) 添加一个新的section
    • has_section(section) 判断是否有section
    • set( section, option, value) 对section中的option进行设置
    • remove_setion(section)删除一个section
    • remove_option(section, option)删除section中的option
    • write(fileobject)将内容写入配置文件。
  • 相关阅读:
    停下来,等等灵魂(二)
    停下来,等等灵魂(一)
    swoole流程图
    使用 Spring Cloud Sleuth、Elastic Stack 和 Zipkin 做微服务监控
    Portainer实战
    Docker 容器日志分析
    docker容器日志查看
    java(集合框架)(转)
    js中const,var,let区别与用法(转)
    【MySQL】Mac通过brew安装的MySQL重启方法
  • 原文地址:https://www.cnblogs.com/systemsystem/p/9763197.html
Copyright © 2011-2022 走看看