码迷,mamicode.com
首页 > 其他好文 > 详细

序列化模块

时间:2018-09-23 18:15:39      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:就是   tin   字典   time   shelve   创建   open   pickle序列化   数据   

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

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

# 序列化模块
    # 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‘\x80\x03}q\x00(K\x01X\x02\x00\x00\x00v1q\x01X\x02\x00\x00\x00k2q\x02X\x02\x00\x00\x00v2q\x03u.‘

# 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}

 

序列化模块

标签:就是   tin   字典   time   shelve   创建   open   pickle序列化   数据   

原文地址:https://www.cnblogs.com/whylinux/p/9692952.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!