序列化和字典补充

序列化和字典补充
序列化:
1.什么是序列化: 我们把变量从内存中变成可存储或传输的过程称之为序列化。
2.如何序列化:在python中提供了两个模块可进行序列化。分别是pickle和json。
3.pickle:pickle只能在python特有的内容,只能在python里面进行转换(缺点不能在不同语言间进行转换)
(1)pickle基础功能
    pickle模块提供了四个功能:dumps、dump、loads、load。
    dumps和dump都是进行序列化,而loads和load则是反序列化。
(2)dumps与dump区别与用法
    dumps将所传入的变量的值序列化为一个bytes,然后,就可以将这个bytes写入磁盘或者进行传输。
    而dump则更加一步到位,在dump中可以传入两个参数,一个为需要序列化的变量,另一个为需要写入的文件。
(3)loads用法
    loads当我们要把对象从磁盘读到内存时,可以先把内容读到一个bytes,然后用loads方法反序列化出对象,
    也可以直接用load方法直接反序列化一个文件。
4.json:无法对函数对像和类进行序列化(优点:可以在不同语言间进行转换;缺点:不可以对函数对象和类进行序列化)
(1)如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,
     因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准
     格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。
例1:pickle.dumps()#对函数进行序列化
    import pickle
    def foo():
        print('ok')
    data=pickle.dumps(foo)
    f=open('pickle.text','wb')
    f.write(data)
    f.close()
例2:pickle.loads()解析
    f=open('pickle.text','rb')
    data=f.read()
    data=pickle.loads(data)
    data()#会报错,因为找不到地址了(地址发生变化了),所以读取不出来,运行报错
    正确方式:
    def foo():
    print('ok')
    f=open('pickle.text','rb')
    data=f.read()
    data=pickle.loads(data)
    data()
(2)json中的方法和pickle中差不多,也是dumps,dump,loads,load。使用上也没有什么区别,区别在于,json中的序列化后格式为字符。
(3)序列化实例:json.dumps()(转换成字符串存储)
    import json
    dic={'name':'eric','age':'22'}
    data=json.dumps(dic)
    f=open('json.text','w')
    f.write(data)
    f.close()
(4)json.dump()#把json.dumps()简化一下
    import json
    dic={'name':'eric','age':'22'}
    f=open('json.text','w')
    # data=json.dumps(dic)
    # f.write(data)
    json.dump(dic,f)
    f.close()
(5)json.loads()#解析字符串
    f=open('json.text','r')
    data=f.read()
    data=json.loads(data)
    print(data['name'])
(6)json.load()
    f=open('json.text','r')
    # data=f.read()
    # data=json.loads(data)
    data=json.load(f)
    print(data['name'])
    f.close()
shelve模块:shelve模块比pickle简单,只有一个open函数,返回类似字典对象,可读可写;key必须为字符串,而值可以是python所支持的
            数据类型。(也只能在python中转换,无法不同语言进行转换)
(1)存shelve.open()
    import shelve
    f=shelve.open('shelve.text')
    f['info']={'name':'eric','age':'22'}
    f.close()
(2)取
    import shelve
    f=shelve.open('shelve.text')
    # f['info']={'name':'eric','age':'22'}
    data=f.get('info')
    print(data)#{'name': 'eric', 'age': '22'}
    f.close()
字典补充:
(1)get获取键直
    d={'name':'eric','age':'22'}
    print(d.get('name'))
(2).get('a','b')的内容a如果找不到值就返回值b
    d={'name':'eric','age':'22'}
    print(d.get('name'))
    print(d.get('sex','man'))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值