python模块之序列化模块

Posted 蔠缬草

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python模块之序列化模块相关的知识,希望对你有一定的参考价值。

  序列化

"""
    序列--字符串
    序列化--其他数据类型转化为字符串数据类型
    反序列化--字符串转化为其他数据类型
"""

 

  json模块

"""
    json 五星好评  数字 字符串 列表 字典 元组
        优点:通用的序列化格式
        缺点:只有很少的一部分数据类型-->字符串
"""

   

    1,dumps和loads

import json
# dumps和loads 操作内存中的数据
dic = {k1: v1}
print(type(dic), dic)   # <class ‘dict‘> {‘k1‘: ‘v1‘}
str_d = json.dumps(dic)  # 序列化
print(type(str_d), str_d)  # <class ‘str‘> {"k1": "v1"}
dic_l = json.loads(str_d)  # 反序列化
print(type(dic_l), dic_l)  # <class ‘dict‘> {‘k1‘: ‘v1‘}

 

    2,dump和load

# dump和load 操作文件中的数据  序列化中文的话,要修改默认参数ensure_ascii=False
dic = {k1: v1}
f = open(json_test, w, encoding=utf-8)
json.dump(dic, f)   # 文件序列化入的内容为{"k1": "v1"}
f.close()
f = open(json_test, encoding=utf-8)
# load只能反序列化一次性序列化入文件中的内容,如果多次dump,load时会报错!
ret = json.load(f)
print(ret)   # {‘k1‘: ‘v1‘}
f.close()

 

  json一些参数的用法

dic = {name: 蔠缬草, age: 25, hobby: read}
str_d = json.dumps(dic)  # 序列化
str_d1 = json.dumps(dic, ensure_ascii=False)  # 序列化中文要想能看懂内容,要修改参数ensure_ascii=False
print(str_d)  # {"age": 25, "name": "\u8520\u7f2c\u8349", "hobby": "read"}
print(str_d1)  # {"hobby": "read", "name": "蔠缬草", "age": 25}

# 特殊格式的序列化
dic = {name: 蔠缬草, age: 25, hobby: read}
str_d = json.dumps(dic, sort_keys=True, indent=4, separators=(,, :), ensure_ascii=False)
print(str_d)
# 打印内容:
"""
{
    "age":25,
    "hobby":"read",
    "name":"蔠缬草"
}
"""

  

  pickle模块

"""
    pickle  序列化为bytes类型
        优点:python中所有的数据类型-->字符串
        缺点:序列化的内容只有python能识别,序列化和反序列化需要相同的环境。
"""

 

  pickle方法和json的方法相同

import pickle
# pickle和json的用法一样,不同的是序列化之后的值是bytes类型
dic = {k1: v1, k2: v2}
pd_str = pickle.dumps(dic)
print(pickle)  # 序列化 打印bytes类型
pl_str = pickle.loads(pd_str)
print(pl_str)  # 反序列化
dic = {k1: v1, k2: v2}
f = open(pickle_test, wb)
pickle.dump(dic, f)   # 序列化  写入的是bytes类型
f.close()
f = open(pickle_test, rb)
ret = pickle.load(f)  # 反序列化
print(ret)

 

  shelve模块

"""
    shelve
        存在序列化句柄
        使用句柄直接操作,非常方便
"""

 

  shelve只有open方法,打开文件返回一个序列化句柄,通过操作句柄来完成序列化的相关操作。

import shelve
f = shelve.open(shelve_test)  # 产生序列化句柄
f[key] = {k1: v1, k2: v2}   # 操作句柄进行文件序列化写入
f.close()
f = shelve.open(shelve_test)
print(f[key])   # 反序列化取值,key必须存在,否则报错
f.close()

 

  shelve writeback参数的用法

f = shelve.open(shelve_test, writeback=False)  # 参数writeback=False 数据修改不会生效
f[key][k3] = v3  # 修改并没有生效
f.close()
f = shelve.open(shelve_test)
print(f[key])   # {‘k2‘: ‘v2‘, ‘k1‘: ‘v1‘}
f.close()

f = shelve.open(shelve_test, writeback=True)
f[key][k3] = v3  # 修改生效
f.close()
f = shelve.open(shelve_test)
print(f[key])   # {‘k3‘: ‘v3‘, ‘k2‘: ‘v2‘, ‘k1‘: ‘v1‘}
f.close()

 

 

 

以上是关于python模块之序列化模块的主要内容,如果未能解决你的问题,请参考以下文章

模块的介绍之序列化模块

python之基础篇——模块与包

Python 入门之 内置模块 -- 序列化模块(json模块pickle模块)

python模块之sys模块和序列化模块

python 学习二十五天(python内置模块之序列化模块)

python模块之序列化模块