zoukankan      html  css  js  c++  java
  • 模块--序列化

    序列化 : 在储存数据或者网络传输数据的时候.需要对对象进行处理,把对象处理成方便储存和传输的数据格式.这个过程叫序列化.

    三种序列化的方案:

    1.pickle 将python的数据类型转化成bytes并写入到文件中. 或把文件中写好的bytes转回python的数据,这个过程成为反序列化

    import pickle
    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    p1 = Person('Max', 18)   #创建对象
    #序列化
    bs = pickle.dumps(p1)#b'x80x03c__main__
    Person
    qx00)x81qx01}qx02(Xx04x00x00x00nameq
                    x03Xx03x00x00x00Maxqx04Xx03x00x00x00ageqx05Kx12ub.'
    #反序列化 pp1 = pickle.loads(bs) #<__main__.Person object at 0x0386A290>

    写入文件操作

    import pickle
    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    p1 = Person('Max', 18)
    f = open('info.pickle', mode = 'wb')
    pickle.dump(p1, f)  
    f.close()
    f = open('info.pickle', mode = 'rb')
    pp1 = pickle.load(f)  
    print(pp1.name)     #Max       

    上述为写入一个对象,如果是写入多个对象,每次执行pickle.load(f)即可调出下一个对象

     可以选择使用while 循环调出所有的对象:

    while 1:
        try:
            p = pickle.load(f)
            print(p)
        except Exception:
            break

    多个对象读写,建议使用list,方便全部取出,循环读取**

    import pickle
    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    p1 = Person('Max', 18)
    p2 = Person('amy', 18)
    p3 = Person('fred', 18)
    lst = [p1,p2,p3]
    f = open('info.pickle', mode = 'wb')
    pickle.dump(lst, f)
    f.close()
    f = open('info.pickle', mode = 'rb')
    ll = pickle.load(f)            #对象列表
    for i in ll:
        print(i.name,end=' ')    #Max amy fred

    2. shelve 简单另类的一宗序列化的方案

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

    import json
    dic = {'a': 'apple', 'b': 'banana', 'c': 'pear'}
    s = json.dumps(dic, ensure_ascii = False) #如果没有ensure_ascii = False,则value以ascii码形式展示
    print(s)     #{"a": "apple", "b": "banana", "c": "pear"}→字符串
    
    s1 = '{"a": "apple", "b": "banana", "c": "pear"}'
    dic = json.loads(s1)
    print(type(dic),dic) #<class 'dict'> {'a': 'apple', 'b': 'banana', 'c': 'pear'}  →字典

    json文件操作

    import json
    dic = {'a': 'apple', 'b': 'banana', 'c': 'pear'}
    f = open('fruit.json', mode = 'w', encoding = 'utf-8')  #写入一个字典
    json.dump(dic, f, ensure_ascii = False)
    f.close()
    
    f = open('fruit.json', mode = 'r', encoding = 'utf-8')
    dic = json.load( f)
    print(dic)      #{'a': 'apple', 'b': 'banana', 'c': 'pear'}
    f.close()

    对于多个字典,和pickle类似,可以写到列表中,再写入json

  • 相关阅读:
    第二十课字符串
    数学归纳法:搞定循环与递归的钥匙
    11预处理命令下
    Xshell6无法连接上虚拟机的解决方法
    redis数据库常用命令
    redis使用get命令,中文乱码问题
    Ubuntu下redis的安装和简单操作
    启动hbase后,使用指令进入shell命令行模式时报错"wrong number of arguments (0 for 1)"
    启动hbase报错:“SLF4J: Class path contains multiple SLF4J bindings.”解决方法
    ./bin/hadoop 提示“没有那个文件或目录”解决方法
  • 原文地址:https://www.cnblogs.com/gracenana/p/10221188.html
Copyright © 2011-2022 走看看