zoukankan      html  css  js  c++  java
  • 序列化

    内存中的数据结构,需要转换成字符串,才能写到磁盘。在python中,可以使用str字段将字典、列表等,转换成字符串。

    把内存中的数据,转化成字符串,叫做序列化。

    str(data)

    相反,字符串转换成内内存中的数据,叫做反序列化。

    • eval

    执行字符串语句,特定情况下,可以实现反序列化

    eval(data)
    • json
    import json
    
    d  = json.dumps(data) #仅转换成字符串
    d2 = json.loads(data)  #字符串还原
    
     f = open("test.json","w")
    json.dump(data,f) #转成字符并写入文件
    
    f = open("test.json","r")
    data = json.load(f)  #从文件载入
    1.  dump写入文件,不能多次dump
    2. 支持类型str,int,tuple,list,dict
    • pickle
    import pickle,json
    
    #
    # d = {'name':'alex','age':22}
    #
    # l = [1,2,3,4,'rain']
    
    
    def syahi():
        print('dddd')
    
    
    
    
     pk = open("data.pkl","wb") #pickle只支持bytes类型写入和读取
    
     pickle.dump(d,pk) #数据类型d存入到pk指向的文件
    
     f = open("data.pkl","rb")
    
     d = pickle.load(f) #读取数据类型pick
     print(d)
    
    pickle.dumps(syahi)

    pickle支持python中所有的数据类型,甚至函数也可以dumps

    缺点是只能在python中使用,不能跨语言。

    • shelve

    当多个数据结构需要保存的时候,使用shelve。shelve是pickie的升级,pickie只能存储一个结构,但是shelve可以存储多个结构。

    • 数据写入
    import shelve
    f = shelve.open('shelve_test')
    f['names'] = names
    f['info'] = info
    f.close()
    • 数据读取
    import shelve
    
    f = shelve.open('shelve_test')
    print(f.get('names'))
    print(f.get('info'))
    
    
    f.update()
    f.close()
    • 更新数据

    更新数据又三种方法:

    1. 新建临时数据,重新按照key值给数据赋值;
    2. 打开的时候,配置参数writeback=True,表示更新后的数据可以写到文件中;
    3. 使用update方法,把数据更新到文件;
    import shelve
    
    #数据更新
    #创建临时数据结构,重新赋值
    with shelve.open('shelve_test') as data:
        temp = data['names']
        temp.append('123')
        data['names'] = temp
        print(data['names'])
    
    #writeback=True,更新数据到文件
    with shelve.open('shelve_test', writeback=True) as data:
        data['names'].append('234')
        print(data['names'])
    
    #使用update方法更新值
    with shelve.open('shelve_test') as data:
        data.update({'names': names})
        print(data['names'])
  • 相关阅读:
    用nodejs 开发的智能提示
    分布式系统之消息中间件rabbitmq
    理解RESTful架构
    zf框架的思想及学习总结
    php网上支付易宝
    phpstorm使用技巧
    phpstorm使用技巧
    mysql中的数据类型
    CF113D 高斯消元、dp
    bzoj4008: [HNOI2015]亚瑟王 dp
  • 原文地址:https://www.cnblogs.com/zxw-xxcsl/p/10706044.html
Copyright © 2011-2022 走看看