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

    回顾
    序列
    序列化
    将转换为字符串类型,用于数据传输和网上传输
    数据类型 字符串
    json
    通用的序列化格式
    只有一部分数据类型可以转化为json的数据类型
    json提供四种操作 dumps dump,load,loads、
    dumps
    import json
    dic = {'k1':'v1','k2':'v2','k3':'v3'}
    str_dic = json.dumps(dic) #序列化:将一个字典转换成一个字符串
    print(type(str_dic),str_dic) #<class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"}
    #注意,json转换完的字符串类型的字典中的字符串是由""表示的
    输出结果<class 'str'> {"k1": "v1", "k2": "v2", "k3": "v3"}
    dic1 = {1:'k1',2:'k2',3:'k3'}
    b=json.dumps(dic1)
    for i in b:
    print(i)
    输出结果为

    {
    "
    1
    "
    :

    "
    k
    1
    "
    ,

    "
    2
    "
    :

    "
    k
    2
    "
    ,

    "
    3
    "
    :

    "
    k
    3
    "
    }

      loads:

    c = json.loads(b)
    print(c)
    输出结果为
    {'2': 'k2', '1': 'k1', '3': 'k3'}

    load 与dump是与文件相关的操作
    import json
    f = open('json_file','w')
    dic = {'k1':'v1','k2':'v2','k3':'v3'}
    json.dump(dic,f)  #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
    f.close()
    
    f = open('json_file')
    dic2 = json.load(f)  #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
    f.close()
    print(type(dic2),dic2)
    注意dump可以写两次,但是读取时会报错
    解决 每次写入之后,用write写入换行符 读的时候用.read 而不是用load。
    f = open('suibian','w')
    dic = {'wo':'yaoxiangfenyiyangziyou'}
    dic1 = {1:'women',2:'zainali'}

    json.dump(dic,f,ensure_ascii=False)
    f.write(' ')
    json.dump(dic1,f,ensure_ascii=False)
    f.write(' ')
    f.close()
    b = open('suibian','r')
    a = b.read()
    print(a,type(a))
    f.close()
    pickle模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load  
    (不仅可以序列化字典,列表...可以把python中任意的数据类型序列化
    shelve

    python的shelve模块

    shelve

    shelve是一额简单的数据存储方案,他只有一个函数就是open(),这个函数接收一个参数就是文件名,并且文件名必须是.bat类型的。然后返回一个shelf对象,你可以用他来存储东西,就可以简单的把他当作一个字典,当你存储完毕的时候,就调用close函数来关闭
     
    这个有一个潜在的小问题,如下:
    复制代码
    import shelve
    
    list = [1, 2, 3]
    
    she = shelve.open('test.dat')
    she['d'] = list
    she['d'].append('f')print(she['d'])
    复制代码

    你会发现,打印后,没有‘f’ ,存储的f到哪里去了呢?其实很简单,d没有写回,你把[1,2,3]存到了d,当你再次读取she['d']的时候,she['d']只是一个拷贝,而你没有将拷贝写回,所以当你再次读取she['d']的时候,它又从源中读取了一个拷贝,所以,你新修改的内容并不会出现在拷贝中,解决的办法就是,第一个是利用一个缓存的变量,如下所示

    复制代码
    import shelve
    
    list = [1, 2, 3]
    
    she = shelve.open('test.dat')
    she['d'] = list
    temp = she['d']
    temp.append('f')
    she['d'] = temp
    print(she['d'])
    复制代码

    这样返回的结果就有‘f’了。

    不过在shelve模块中,key必须为字符串,而值可以是python所支持的数据类型。

    摘自https://www.cnblogs.com/caibao666/p/6531044.html

     
     
     
  • 相关阅读:
    浅析Android中的消息机制
    Delphi 调用webservice接口
    进程间的相互调用与参数传递【Delphi版】
    网络上可供测试的Web Service
    mysql复制功能——“masterslave”结构
    SQL Server 2008 事件探查器【转】
    mysql常用存储引擎对比(转)
    线程池基本理论
    中国金融体系简略图
    《Windows核心编程》学习笔记(6)– 线程的创建、与进程的关系、伪句柄转换
  • 原文地址:https://www.cnblogs.com/accolade/p/10488081.html
Copyright © 2011-2022 走看看