zoukankan      html  css  js  c++  java
  • json & pickle数据序列化

    序列化:把内存中的数据对象变成字符串

    info = {
        'name':'tom',
        'age':22
    }
    
    f = open("test.txt","w")
    f.write(str(info))
    f.close()

    反序列化:从硬盘中把数据加载到内存

    f = open("test.txt","r")
    
    data = eval(f.read())
    f.close()
    print(data['age'])

    json方式

    import json
    
    info = {
        'name':'tom',
        'age':22
    }
    
    f = open("test.txt","w")
    f.write(json.dumps(info))
    f.close()
    import json
    
    f = open("test.txt","r")
    
    data = json.loads(f.read())
    print(data["age"])

    json只能处理字典,列表,字符串等简单的数据类型,因为json适用于不同语言的数据交互,每种语言都有这些基本的数据类型,只能处理这些简单的

    pickle可以处理复杂的数据类型,如函数,类,但是不能跨语言,只能用于python

    import pickle
    
    def sayhi(name):
        print('hello,',name)
    
    info = {
        'name':'tom',
        'age':'22',
        'func':'sayhi'
    }
    
    f = open("test.txt","wb")
    f.write(pickle.dumps(info))
    f.close()
    import pickle
    
    def sayhi(name):     # 需要再把函数拷贝到这里来,运行结果才不会出过错,上面的代码把内存地址序列化到文件中,反序列化的时候,就没有内存地址了,因为sayhi函数的内存地址伴随着程序执行完后,内存地址就被释放掉了,这个函数对象就找不到了,所以也就无法重新导入了,会报错
        print('hello,',name)
    
    f=open("test.txt","rb")
    
    data=pickle.loads(f.read())
    print(data["func"]("tom"))
  • 相关阅读:
    POJ3114强连通+spfa
    POJ2431贪心(最少加油次数)
    POJ2431贪心(最少加油次数)
    POJ2391 Floyd+离散化+二分+DINIC
    POJ2391 Floyd+离散化+二分+DINIC
    POJ2195费用流+BFS建图
    POJ2195费用流+BFS建图
    POJ2060最小路径覆盖
    POJ2060最小路径覆盖
    POJ2044 深搜+剪枝(云彩下雨)
  • 原文地址:https://www.cnblogs.com/Ryans-World/p/7275172.html
Copyright © 2011-2022 走看看