zoukankan      html  css  js  c++  java
  • 什么是序列化,Python中json的load,loads,dump,dumps和pickle的load,loads,dump,dumps的区别

    我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化

    json就是一种序列化的传输手段(json序列化的是字典类型的数据类型

    Python把一个字典序列化到一个文本文件中,使用json.dump或者dumps,如下:

    import json
    dic={'name':'ljj','age':18}
    data=json.dumps(dic)
    f=open('json_text','w')
    f.write(data)
    f.close()

    或者如下:

    import json
    dic={'name':'ljj','age':18}
    
    f=open('json_text2','w')
    # data=json.dumps(dic)
    # f.write(data)
    json.dump(dic,f)
    f.close()

    dump与dumps的区别就是dumps需要自己将序列化的字典write到文件中,而dump内部已经帮我们做了这一步

    从文本文件中读取,使用json.load或者loads,则如下:

    import json
    f = open('json_text','r')
    data=f.read()
    data=json.loads(data)
    print(data['name'])

    或者如下:

    import json
    f = open('json_text2','r')
    # data=f.read()
    data=json.load(f)
    print(data['name'])

    load与loads的区别就是loads需要自己将文件中的信息反序列化到内存中再read,而load内部已经帮我们做了这一步

    pickle就是一种序列化的传输手段(pickle序列化的是函数和类

    序列化到文件中

    import pickle
    
    def foo():
        print('ok')
    
    data = pickle.dumps(foo)
    f = open('PICKLE_text','wb')
    f.write(data)
    f.close()

    反序列化到内存里

    import pickle
    
    def foo():
        print('ok')
    f = open('PICKLE_text','rb')
    
    data = f.read()
    data=pickle.loads(data)
    
    data()#需要上面添加foo()函数才不会报错,因为反序列化之后,foo的引用地址会找不到foo函数,需要重新加载

     shelve模块

    shelve模块比pickle模块简单,只有一个open函数,返回类似于字典的对象,可读可写:key必须为字符串,而值可以是python所支持的数据类型

    import shelve
    f = shelve.open(r'SHELVE_text.txt')
    f['info'] = {'name':'ljj','age':18}
    f['shopping'] = {'name':'手机','price':1000}
    data = f.get('shopping')
    print(data)
  • 相关阅读:
    【Java】:判断数据类型
    【Shell编程】:多命令处理
    正则表达式
    26、DIEN(DIN的延伸)
    25、深层用户兴趣网络DIN(阿里)
    强化学习(7)---动态规划
    强化学习(6)---马尔可夫过程
    ubuntu出现终端和浏览器输入法不能显示中文,但是ubuntu software可以显示(fcitx)
    ASP.NET实现企业微信接入应用实现身份认证
    DevOps
  • 原文地址:https://www.cnblogs.com/softtester/p/11612498.html
Copyright © 2011-2022 走看看