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

    序列化模块

    1. 认识序列化

    1.1 什么叫序列化

      数据类型 ---> 字符串的类型 叫做序列化(字符串化)

    1.2 为什么要用序列化模块

      数据从内存到文件 固态存储

      数据在网络上传输  字节 - 自防护窜 -字典 网络传输

    1.3 python中的序列化模块有哪些

      json 通用的  支持的数据类型有list tuple dict

      pickle  python中通用的,支持几乎所有python中的数据类型

      shelve  py3中不是很好用,使用便捷

    1.3.1 json

    基于内存  dumps loads

    import json
    dic = {"k":'v'}
    print(type(dic))
    json_dic = json.dumps(dic)   # 字典转字符串的过程 ——序列化
    print(json_dic)
    print(dic)
    print(type(json_dic))
    print(json.loads(json_dic)) # 字符串 转回其他数据类型 —— 反序列化

    基于文件 dump load

    import json
    dic = {"k":'v'}
    
    with open('d','w') as f:
        json.dump(dic,f)       # dump是和文件交互的
        # json.dump(dic,f)       # 连续dump两次,load会报错。
    
    with open('d') as f:
        print(json.load(f))      # 从文件中反序列化
    
    
    # 如果要dump多条数据
    # 每一条数据线dumps一下 变成字符串 然后打开文件 write写进文件里 
    
    # 读取的时候按照标志读取或者按行读
    # 读出来之后 再使用loads
    
    with open('aaa','w') as f:
        str_dic = json.dumps(dic)
        f.write(str_dic+'
    ')
        f.write(str_dic+'
    ')
        f.write(str_dic+'
    ')
        f.write(str_dic+'
    ')
    
    with open('aaa') as f:
        for line in f:
            print(json.loads(line.strip()))

    1.3.2 pickle

    import pickle
    class A:
        def __init__(self,name):
            self.name = name
    
    alex = A('alex')
    print(pickle.dumps(alex))  # b'x80x03c__main__
    A
    qx00)x81qx01}qx02Xx04x00x00x00nameqx03Xx04x00x00x00alexqx04sb.'
    with open('bbb','wb') as f:
        pickle.dump(alex,f)
        pickle.dump(alex,f)
        pickle.dump(alex,f)
    
    #  pickle可以直接多次dump和load,但是load完数据之后再执行load,会报错。这里使用异常处理try:
    with open('bbb','rb') as f: while True: try: obj = pickle.load(f) print(obj.name) except EOFError: break

    1.pickle支持更多的数据类型
    2.pickle的结果是二进制
    3.pickle在和文件交互的时候可以被多次load

    1.3.3  shelve

    不支持多个对象同时写一个文件的操作  很少用

    友情链接 :

    http://www.cnblogs.com/Eva-J/articles/7228075.html#_label9

     

     

  • 相关阅读:
    Codeforces 765 E. Tree Folding
    Codeforces 617 E. XOR and Favorite Number
    2017.3.4[hihocoder#1403]后缀数组一·重复旋律
    2017.2.23[hdu1814]Peaceful Commission(2-SAT)
    2017.2.18Codeforces Round #398 (Div. 2)
    2017.2.18[codevs1170]NOIP2008提高组复赛T4双栈排序
    2017.2.18[codevs3319][bzoj3670]NOI2014D2T1动物园
    2017.2.18[codevs3311][bzoj3668]NOI2014D1T1起床困难综合症
    2017.2.10 Splay总结
    2017.2.10考试总结2017冬令营
  • 原文地址:https://www.cnblogs.com/wangph/p/9069280.html
Copyright © 2011-2022 走看看