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

    json模块

    json,用于字符串 和 python基本数据类型间进行转换

    import json
    
    # json 支持跨平台,但仅支持基本的数据类型,用于字符串 和 python数据类型间进行转换
    # Json模块提供了四个功能:dumps、dump、loads、load
    s = {"user": "pig","status": "50%"}
    data = json.dumps(s)  # 序列化:将字典转换成字符串
    print(data, type(data))
    # 注意,json转换完的字符串类型的字典中的字符串是由""表示的
    s1 = json.loads(data) # 反序列化:将一个字符串转换成一个字典
    # 注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
    print(s1, type(s1))
    # json的dumps和loads也可以处理嵌套的数据类型
    li_s = [1, 2, 3, {"k1": "v1", "k2": [1, 2, 3], "k3":{"s1": "s2"}}]
    data_li = json.dumps(li_s)
    print(data_li, type(data_li))
    data2 = json.loads(data_li)
    print(data2,type(data2))
    # dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件,可多次使用dump写入
    f = open("json_file", "w")
    s = {"user": "pig", "status": "50%"}
    li_s = [1, 2, 3, {"k1": "v1", "k2": [1, 2, 3], "k3":{"s1": "s2"}}]
    json.dump(s, f)
    json.dump(li_s, f)
    f.close
    # load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回,只能读取一次,可以是嵌套的数据类型,且不能有多个不同类型的文件句柄
    # f = open("json_file")
    # data3 = json.load(f)
    # print(data3, type(data3))
    
    # 注意:
    # 在使用json.dumps时要注意一个问题
    # print(json.dumps('中国'))输出的会是'中国'的ascii字符码,而不是真正的中文。
    # 这是因为json.dumps序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii = False
    contry = {"国籍":"中国"}
    print(json.dumps(contry, ensure_ascii=False))

    pickle模块

    pickle,用于python特有的类型 和 python的数据类型间进行转换,不支持跨平台

    import pickle, time
    s = {"user": "pig","status": "50%"}
    data1 = pickle.dumps(s)     # 使用pickle的dumps序列化后是一串二进制内容,类型是bytes
    print(data1,type(data1))
    
    dic1 = pickle.loads(data1)
    print(dic1,type(dic1))     # 反序列化后是正常的字典
    
    f = open("file","wb")
    pickle.dump(time.localtime(1000000),f)
    f.close()
    
    f = open("file","rb")
    s = pickle.load(f)
    print(s)

    shelve 模块

    shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式

    import shelve
    # 序列化:
    f = shelve.open("shelve_file")
    s = {"user": "pig","status": "50%"}
    li_s = [1, 2, 3, {"k1": "v1", "k2": [1, 2, 3], "k3":{"s1": "s2"}}]
    f["s"] = s
    f["li_s"] = li_s
    f.close()
    # 会生成三个文件,内容看不懂
    # 反序列化
    d = shelve.open("shelve_file")
    print(d["s"])
    print(d["li_s"])
    
    
    del d["s"]   # 可以删除
  • 相关阅读:
    redis
    docker :no such file or directory
    删除Linux的用户
    lunux系统安全
    centos7.4yum错误
    POI2014 HOT-Hotels
    POI2009 KON-Ticket Inspector
    CF140E New Year Garland
    CF392B Tower of Hanoi
    落谷 P2401 不等数列
  • 原文地址:https://www.cnblogs.com/zt0903/p/10687006.html
Copyright © 2011-2022 走看看