• 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

     

     

  • 相关阅读:
    mod_wl.so,apxs,mod_so.c,withmpm=worker,selinux;apapche&weblogic链接配置
    rc.local
    库没启动,报:ORA01034: ORACLE not available
    Socket编程简单示例
    基于UDP的Socket编程
    代理模式
    [转]Tomcat Server.xml 标签详解
    创建和使用URL访问网络资源
    myeclipse8.5中 集成svn
    div+css布局之固定定位布局
  • 原文地址:https://www.cnblogs.com/wangph/p/9069280.html
Copyright © 2020-2023  润新知