zoukankan      html  css  js  c++  java
  • Python之初识模块之序列化模块

    什么叫序列化——将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化

    序列化的目的

    1、以某种存储形式使自定义对象持久化
    2、将对象从一个地方传递到另一个地方。
    3、使程序更具维护性。

    json 是一种通用的序列化格式,只有很少的数据类型可以通过json转化为字符串

    import json
    dic = {'k1':'q1','k2':'q2','k3':'q3'}
    str_dic = json.dumps(dic)  # 序列化,将一个字典转换成一个字符串
    print(type(str_dic),str_dic)  # 注意,json转换完的字符串类型的字典中的字符串是由""表示的
    dic1 = json.loads(str_dic)  # 反序列化,将字符串转回字典
    print(type(dic1),dic1)  # 注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
    list1 = [1,2,3,4,{'k1':'q1','k2':'q2','k3':'q3'}]
    str_list1 = json.dumps(list1)  # 注意,可以处理嵌套的数据类型
    print(type(str_list1),str_list1)
    list1_1 = json.loads(str_list1)
    print(type(list1_1),list1_1)
    import json
    dic = {'k1':'q1','k2':'q2','k3':'q3'}
    with open('qqq','w',encoding='utf-8') as f:  # dump方法接受一个文件句柄(f),将内容转换成json字符串写进文件
        json.dump(dic,f)
    with open('qqq','r',encoding='utf-8') as f:  # load方法接受一个文件句柄(f),将文件中json字符串的内容转换成数据结构返回
        dic_1 = json.load(f)
        print(dic_1)
    Skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),
          设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key ensure_ascii:,当它为True的时候,所有非ASCII码字符显示为uXXXX序列,只需在dump时将ensure_ascii设置为False即可,
          此时存入json的中文即可正常显示。) indent:应该是一个非负的整型,如果是0就是顶格分行显示,如果为空就是一行最紧凑显示,若为其它数值,则是每行缩进的字符数 separators:分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是(‘,’,’:’);
          这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开。 sort_keys:将数据根据keys的值进行排序
    import json
    data = {'username':['哈哈','收到'],'sex':'male','age':26}
    json_dic2 = json.dumps(data,sort_keys=True,indent=2,separators=(',',':'),ensure_ascii=False)
    print(json_dic2)

    pickle  python中所有的数据类型都可转化成字符串,但反序列化内容只能使用python读取

         且反序列化依赖代码

    import pickle
    dic = {'q1':'w1','q2':'w2','q3':'w3'}
    str_dic = pickle.dumps(dic)
    print(str_dic)  #一串二进制内容
    
    dic2 = pickle.loads(str_dic)
    print(dic2)    #字典
    
    import time
    struct_time  = time.localtime(1000000000)
    print(struct_time)
    f = open('pickle_file','wb')
    pickle.dump(struct_time,f)
    f.close()
    
    f = open('pickle_file','rb')
    struct_time2 = pickle.load(f)
    f.close()
    print(struct_time2.tm_year)

    shelve 只有一个方法,open(),拿到一个文件句柄,操作与字典类似

    import shelve
    f = shelve.open('aaa')
    f['s']={1:'a',2:'b'}
    f.close()
    f1 = shelve.open('aaa')
    s = f1['s']  # 直接调用key,若不存在会报
    f1.close()
    print(s,s2)
  • 相关阅读:
    mysql中表名是order的CRUD的错误
    BAT-增加JAVA环境变量(WIN764位)
    D7 D2007 XE10.1 都支持的字符分隔函数
    问题-百度云同步盘登陆时提示155010错误
    BAT-批量改文件后缀名
    delphi判断线程是否正在运行
    JAVA-JSP动作元素之param
    JAVA-JSP动作元素之forward
    JAVA-JSP动作元素之include
    JAVA-JSP之taglib指令
  • 原文地址:https://www.cnblogs.com/xfdhh/p/10870906.html
Copyright © 2011-2022 走看看