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

    我们的目的是类似虚拟机的挂起操作

    在没学json与pickle之前我们通常这样。

    #序列化
    a={
        'name':'qiangql',
        'age':22
    }
    f=open('text.text','w')
    f.write(str(a))  #这里用str把字典变成了字符串
    f.close()
    #反序列化
    f=open('text.text','r')
    b=eval(f.read())    #这里用eval把字符串变成了可执行的字典
    f.close()
    print(b['age'])
    1 C:UsersqiangqlAppDataLocalProgramsPythonPython36-32python.exe C:/Users/qiangql/PycharmProjects/untitled/内置函数测.py
    2 22
    3 
    4 Process finished with exit code 0
    执行结果

    json方法,json 可以跨平台,但是不支持日期!!!!

    #序列化json
    import json
    a={
        'name':'qiangql',
        'age':22
    }
    f=open('text1.text','w')
    f.write(json.dumps(a)) #这里也可写为json.dump(a,f)
    json.dump(a,f)
    f.close()
    #反序列化jeson
    import json
    f=open('text1.text','r')
    # data=json.loads(f.read())
    data=json.load(f)
    print(data['age'])
    1 C:UsersqiangqlAppDataLocalProgramsPythonPython36-32python.exe C:/Users/qiangql/PycharmProjects/untitled/反序列化.py
    2 22
    3 
    4 Process finished with exit code 0
    执行结果

    pickle方法,支持所有pyhton格式

    #序列化pickle
    import pickle
    def sayhello(name):
        print('hello',name)
    
    a={
        'name':'qiangql',
        'age':22,
        'func':sayhello
    }
    
    f=open('text11.text','wb')  #二进制,因为他支持多平台,所以这里是多平台都能识别的二进制
    
    pickle.dump(a,f)  ### f.write(pickle.dumps(a))
    f.close()
    #反序列化
    import pickle
    def sayhello(name):
        print('hello',name)
    f=open('text11.text','rb')
    
    data=pickle.load(f)      ###data=pickle.loads(f.read())
    print(data['age'])
    print(data['func']('qiangql'))
    1 C:UsersqiangqlAppDataLocalProgramsPythonPython36-32python.exe C:/Users/qiangql/PycharmProjects/untitled/picket反序列化.py
    2 22
    3 hello qiangql
    4 None
    5 
    6 Process finished with exit code 0
    执行结果

    这里要注意一点,所有的序列化,都只能挂起一次,然后反序列化一次,不能多次进行挂起操作,因为反序列化只能一次。

  • 相关阅读:
    【Luogu】P1419寻找段落(单调队列)
    【Luogu】P1411树(树形高精DP)
    【Luogu】P2886牛继电器(矩阵加速floyd)
    【Luogu】P2657windy数(数位DP)
    【Luogu】P3521ROT-Tree Rotations(线段树合并)
    24-Perl 数据库连接
    23-Perl 面向对象
    22-Perl Socket 编程
    21-Perl 发送邮件
    20-Perl 正则表达式
  • 原文地址:https://www.cnblogs.com/PYlog/p/8693891.html
Copyright © 2011-2022 走看看