zoukankan      html  css  js  c++  java
  • 序列化模块(sys)

    序列化模块

    序列化——转向一个字符串数据类型
    序列——字符串

    应用:  

    把数据类型转换成字符串:
       写文件
       网络上传输的时候
    从数据类型到字符串的过程就叫做序列化。
    从字符串再转换回数据类型的过程就叫做反序列化。

    json 模块

    dumps和loads

    import json
    dic = {'k1':'v1','k2':'v2','k3':'v3'}
    str_dic = json.dumps(dic)  #序列化:将一个字典转换成一个字符串
    print(type(str_dic),str_dic)  #<class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"}
    #注意,json转换完的字符串类型的字典中的字符串是由""表示的
    
    dic2 = json.loads(str_dic)  #反序列化:将一个字符串格式的字典转换成一个字典
    #注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
    print(type(dic2),dic2)  #<class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
    
    
    list_dic = [1,['a','b','c'],3,{'k1':'v1','k2':'v2'}]
    str_dic = json.dumps(list_dic) #也可以处理嵌套的数据类型
    print(type(str_dic),str_dic) #<class 'str'> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}]
    list_dic2 = json.loads(str_dic)
    print(type(list_dic2),list_dic2) #<class 'list'> [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2'}]
    View Code

    注意:json的局限性很大,但是是通用的。可以在各种语言中使用。

    再python中,当我们使用json去转换元组和集合时,此时就会出错。

    dic = (1,2,3,4,3)
    big = json.dumps(dic)
    print(type(big),big)
    x = json.loads(big)
    print(type(x),x)

    我们看到,当转换元组时python会把元组转化成列表的形式,当再反序列是我们得到的就不再是元组了,而是一个列表。

    dump和load

    当我们需要把数据类型存到文件或者从文件中把其中的内容转换成我需要的数据类型时,这个时候。我们就可以使用dump和load来帮助我们实现了。

    列如:

    import json
    f = open('json_file','w')
    dic = {'k1':'v1','k2':'v2','k3':'v3'}
    json.dump(dic,f)  #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
    f.close()
    View Code

    当我们需要再次从文件中提取出我们所存的数据类型时,我就可以使用load来帮忙。

    f = open('json_file')
    dic2 = json.load(f)  #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
    f.close()
    print(type(dic2),dic2)

    看下结果:

    
    

    pickle

     pickle模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load  (不仅可以序列化字典,列表...可以把python中任意的数据类型序列化)

    注意:

      使用pickle时,虽然方法和json一样。但是再打开文件和读取文件时应使用wb和rb形式打开。

      对于pickle来说可以分步的去dump和load,而json不行。

    shelve 

    特点:比较号操作。

    shelve时python提供给我们的序列化工具,且只提供了一个open的工具,是用key来访问的。类似于字典的用法。

    例如:
    import shelve
    f = shelve.open('套你大象')
    f['key'] = {'k1:1','k2:1','k3:1','k4:1','k5:1'}
    f.close()

     我们通过key将数据类型直接存储到文件中

    这是,我们可以直接通过key直接将我们序列化的数据类型直接读取出来。

    import shelve
    f = shelve.open('套你大象')
    f['key'] = {'k1:1','k2:1','k3:1','k4:1','k5:1'}
    f.close()

     

    总结:

    json 通用的序列化格式。
    弊端:只有很少一部分数据类型能够通过json转化成字符串。
    pickle
     #多有的的python的数据类型都可以转化成字符串形式。
     #pickle序列化的内容只有python能理解。
     #且部分反序列化依赖代码
    shelve
     #序列化句柄
     #使用句柄直接操作,非常方便。
  • 相关阅读:
    js命名空间笔记
    css3兼容性问题归纳
    flexbox-CSS3弹性盒模型flexbox完整版教程
    JavaScript 预解析
    消除页面上的链接虚线框
    图片压缩之 PNG
    常见的前端优化技巧有哪些
    for-of循环和for-in循环的区别
    函数式编程初探
    js中同步与异步处理方法
  • 原文地址:https://www.cnblogs.com/zly9527/p/11466056.html
Copyright © 2011-2022 走看看