zoukankan      html  css  js  c++  java
  • python序列化 pickle,json模块

    Python中用于序列化的两个模块

    • json     用于【字符串】和 【python基本数据类型】 间进行转换
    • pickle   用于【python特有的类型】 和 【python基本数据类型】间进行转换

    Json模块提供了四个功能:dumps、dump、loads、load

    pickle模块提供了四个功能:dumps、dump、loads、load

    pickle.dump[ojb, file [,protocol]

      序列化对象,并将结果数据流写入到文件对象中。

      必填参数ojb表示要封装的对象

      必填参数file表示ojb写入的文件对象,file文件必须是二进制的模式打开,如‘rb’

      参数protocol是序列化模式,默认值为0。

    pickle.load(file)
      反序列化对象。将文件中的数据解析为一个Python对象。

      必填参数file必须以二进制可读模式打开,即“rb”,其他都为可选参数

    pickle.dumps(obj)

      以字节对象形式返回封装的对象,不需要写入文件中

    pickle.loads(bytes_object):

      从字节对象中读取被封装的对象,并返回

    pickle可能出现三种异常:

        1. PickleError:封装和拆封时出现的异常类,继承自Exception

        2. PicklingError: 遇到不可封装的对象时出现的异常,继承自PickleError

        3. UnPicklingError: 拆封对象过程中出现的异常,继承自PickleError

    下面是一个修改文件的例子:

    import pickle
    
    account = {
        'xiaoming' :{
            'name' : 'mingrizhaoyang',
            'emai' : '2556688@qq.com',
            'password' : 'abc123',
            'balance' : 10000,
            'bank_acc' : {
                'ICB' : '23123123123',
                'CCB' : '28321831823123'
            }
    
        },
        'xiaohong' :{
                'name' : 'buzhibujue',
                'emai' : '333333@qq.com',
                'password' : 'qaq123',
                'balance' : 10000,
                'bank_acc' : {
                    'ICB' : '12372847384',
                    'CCB' : '12324452661'
                }
        }
    }
    with open('acc_data', 'wb') as f:
        pickle.dump(account, f)
    import pickle,pprint
    with open('acc_data', 'rb') as fb:
        data = pickle.load(fb)
        pprint.pprint(data)
    import pickle
    fb = open('acc_data', 'rb')
    ac_data = pickle.load(fb)                      #也可以   c_data = pickle.loads(fb.read())   
    ac_data["xiaohong"]['balance'] = ac_data["xiaohong"]['balance'] - 1000
    fb.close()                                                
    
    with open('acc_data', 'wb') as f:
        pickle.dump(ac_data, f)                    #也可以 f.write(pickle.dumps(ac_data))

     JSON

      

    import json
    
    account = {
        'xiaoming' :{
            'name' : 'mingrizhaoyang',
            'emai' : '2556688@qq.com',
            'password' : 'abc123',
            'balance' : 10000,
            'bank_acc' : {
                'ICB' : '23123123123',
                'CCB' : '28321831823123'
            }
    
        },
        'xiaohong' :{
                'name' : 'buzhibujue',
                'emai' : '333333@qq.com',
                'password' : 'qaq123',
                'balance' : 10000,
                'bank_acc' : {
                    'ICB' : '12372847384',
                    'CCB' : '12324452661'
                }
        }
    }
    with open('acc_data', 'w') as f:
        json.dump(account, f)
    import json
    with open('acc_data', 'r') as fb:
        data = json.load(fb)
        print(data)
    import json                                                                      
    # with open('acc_data', 'r') as fb:                                              
    #     data = json.load(fb)                                                       
    fb = open('acc_data', 'r')                                                       
    data = json.load(fb)                                                             
    data["xiaohong"]['balance'] = data["xiaohong"]['balance'] - 1000                 
    with open('acc_data', 'w') as f:                                                 
        json.dump(data, f)                                                           

     json.loads

      用于将形式字典、列表、元祖的字符串,转换成dict、list、tuple

      

    import json
    t1 = '{"l":"123", "p":"456"}'
    t2 = "[11, 22, 33, 44]"
    result1 = json.loads((t1))
    result2 = json.loads(t2)
    print(result1,result2)

    》》》{'p': '456', 'l': '123'} [11, 22, 33, 44]

      json,dumps()

      将python基本数据类型转换成字符串

      

    import json
    li = [11, 22, 33, 44]
    result = json.dumps(li)
    print(result,type(result))
    
    》》》[11, 22, 33, 44] <class 'str'>
    

      

    json load and dump

    import json
    dic = {"l":"123", "p":"456"}
    json.dump(dic, open("db", 'w')) #将基础类型转换成字符串,写进文本

    re = json.load(open("db","r"))      #读取文本信息,转换成基础类型
    print(re)

      

  • 相关阅读:
    对象结构型
    对象结构型
    对象行为型模式
    定时任务(二)
    定时任务(一)
    kill端口-更新sql-添加字段
    获取ip和端口号
    List集合中的末位元素置首位
    首页报表数据展示(一)
    具体的类中包括枚举类写法
  • 原文地址:https://www.cnblogs.com/waylon/p/6598947.html
Copyright © 2011-2022 走看看