zoukankan      html  css  js  c++  java
  • python 之 json 与pickle 模块

    序例化:将对象转换为可通过网络传输或可以存储到本地磁盘的数据格式(如:XML、JSON或特定格式的字节串)的过程称为序列化;反之,则称为反序列化。

    1.【JSON】

    import json
    
    dic={'name':'kebi','age':23,'sex':'male'}
    print(type(dic))#<class 'dict'>
    
    data=json.dumps(dic)
    print("type",type(data))#<class 'str'>
    print("data",data)
    
    
    f=open('JSON_test','w')
    f.write(data)  #-------------------等价于json.dump(dic,f)
    f.close()
    
    #转换,反序列化
    with open('JSON_test','r') as f:
                data = json.loads(f.read())
                print(data)
                print(data['name'])

    2.【JSON进阶】

    Python的dict对象可以直接序列化为JSON的{},不过,很多时候可以用class表示对象,比如定义Student类,然后序列化:

    import json
    
    class Student(object):
        def __init__(self,name,age,score):
            self.name=name
            self.age=age
            self.score=score
    
    def studen2dic(std): #先将对象实例变为一个json对象
        return {
            'name':std.name,
            'age':std.age,
            'score':std.score
    
        }
    s=Student('Bob',22,99)
    #这样,Student实例首先被student2dict()函数转换成dict,然后再被顺利序列化为JSON:
    
    print(json.dumps(s,default=studen2dic))
    print(json.dumps(s,default=lambda obj:obj.__dict__))#如果遇到一个Teacher类的实例,照样无法序列化为JSON。我们可以偷个懒,把任意class的实例变为dict
    
    
    #------json反转为对象
    def dict2student(d):
        return Student(d['name'],d['age'],d['score'])
    json_str2='{"name":"lan","age":12,"score":100}'
    print(json.loads(json_str2,object_hook=dict2student))#打印出来的是对象地址
    s2=json.loads(json_str2,object_hook=dict2student)
    print(s2.age,s2.name)

    【3】pickle

    import pickle
     
    dic={'name':'alvin','age':23,'sex':'male'}
     
    print(type(dic))#<class 'dict'>
     
    j=pickle.dumps(dic)
    print(type(j))#<class 'bytes'>
     
     
    f=open('序列化对象_pickle','wb')#注意是w是写入str,wb是写入bytes,j是'bytes'
    f.write(j)  #-------------------等价于pickle.dump(dic,f)
     
    f.close()
    #-------------------------反序列化
    import pickle
    f=open('序列化对象_pickle','rb')
     
    data=pickle.loads(f.read())#  等价于data=pickle.load(f)
     
     
    print(data['age'])

    【4】JSON和pickle 的区别:

    json:用于(不同平台和多语言)字符串和python数据类型进行转换

    pickle:用于python特有的类型和python的数据类型间进行转换(所有python数据类型)

  • 相关阅读:
    机器学习之支持向量机
    C++ 踩的坑
    C++ 虚析构函数
    Linux 离线安装软件
    samba配置问题
    字符串相关函数总结
    printf(),类型修饰符
    getopt()和getopt_long()用法
    关于GDB使用
    关于C语言宏定义 使用do{ xxxx }while()
  • 原文地址:https://www.cnblogs.com/lanyinhao/p/9176160.html
Copyright © 2011-2022 走看看