序列化模块

Posted whylinux

tags:

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

# 序列化模块
    # 序列化 都是转向一个字符串数据类型的过程
    # 序列 ---- 这里说的就是字符串
    # 可以进行序列化的东西
        # 数字、字符串、列表、字典、元组(元组的序列化其实是转换成列表后再去进行序列化的)

    # 从数据类型  到 字符串的过程 就叫做序列化
    # 从字符串  到 数据类型的过程 就叫做反序列化

# 序列化模块
    # json    通用的序列化格式, 能被json序列化的数据类型是数字、字符串、字典
        # 只有很少的一部分数据类型(数字、字符串、字典)能够通过josn换成字符串,
            # dumps 序列化方法
            # loads 反序列化方法

    # pickle (应用的领域,例如游戏中,退出后,当再次登录时还是在上次的位置)
        # 所有python中的数据类型都可以被序列化
        # pickle序列化的内容只有python能理解
        # 且部分反序列化依赖代码
    # shelve   python3中新出现的一种序列化方式
        # 序列化句柄
        # 使用句柄直接操作,非常方便

# json   dumps 序列化方法
dic = {k1:v1}
import json
str_d = json.dumps(dic) # 将字典进行序列化
print(type(str_d), str_d)   # <class ‘str‘> {"k1": "v1"}

# json   loads 反序列化方法
dic_d = json.loads(str_d)   # 反序列化
print(type(dic_d), dic_d)   # <class ‘dict‘> {‘k1‘: ‘v1‘}

# json dump  一次性的序列化后写入文件
dic = {1 : 中国, 2:b}
f = open(fff, w, encoding=utf-8)
# ensure_ascii=False 使得在文件中的中国是中国
json.dump(dic, f, ensure_ascii=False)   # 将字典序列化成字符串后,写入到了文件中
f.close()

# json load  一次性的读出后反序列化
f = open(fff, encoding=utf-8)
res = json.load(f)  # 从文件中将字符串反序列化
f.close()
print(type(res), res)   # <class ‘dict‘> {‘2‘: ‘b‘, ‘1‘: ‘a‘}



# pickle    所有python中的数据类型都可以被序列化
    # 方法
    # dumps
    # loads
    # dump
    # load

import time
import pickle

# pickle  dumps  序列化,变成了二进制数据
dic = {1:v1, k2:v2}
str_dic = pickle.dumps(dic) # 将字典序列化,变成了二进制数据
print(str_dic)  # b‘x80x03}qx00(Kx01Xx02x00x00x00v1qx01Xx02x00x00x00k2qx02Xx02x00x00x00v2qx03u.‘

# pickle  loads  反序列化,二进制数据变成数据类型
dic2 = pickle.loads(str_dic)    # 将数据进行反序列化
print(dic2) # {1: ‘v1‘, ‘k2‘: ‘v2‘}

struct_time1 = time.localtime(1000000000)
struct_time2 = time.localtime(2000000000)
f = open(pickle_file, wb)   # 因为pickle序列化后的是二进制bytes类型,所以要往文件写时,要以b打开,bytes打开

# pickle dump   #
pickle.dump(struct_time1, f)
pickle.dump(struct_time2, f)
f.close()

# pickle load  # load可以分次读出然后反序列化
f = open(pickle_file, rb)
struct_time1 = pickle.load(f)
struct_time2 = pickle.load(f)
print(struct_time1.tm_year) # 2001
print(struct_time2.tm_year) # 2033
f.close()




# shelve    # 序列化写入文件时,他还会创建bak、dat、dir文件
    # 这个模块有个限制,它不支持多个应用同一时间往同一个DB进行写操作。
    # 所以当我们知道我们的应用如果只进行读操作,我们可以让shelve通过只读的方式打开DB
import shelve
f = shelve.open(shelve_file)
f[key] = {int: 10, float:9.0} # 直接对文件句柄进行操作,序列化操作写入文件,索引为‘key‘
f.close()

f1 = shelve.open(shelve_file)
existing = f1[key]    # 直接读取文件的‘key‘位置的序列化的内容,然后反序列化得到
f1.close()
print(existing) # {‘int‘: 10, ‘float‘: 9.0}

 

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

CTS测试CtsWindowManagerDeviceTestCases模块的testShowWhenLockedImeActivityAndShowSoftInput测试fail项解决方法(代码片段

Part5-1-2 Nodejs 核心模块

如何将字符串数据从活动发送到片段?

Spark闭包与序列化

argparse 代码片段只打印部分日志

nodejs常用代码片段