数据序列化

数据序列化:通过将对象序列化可以将其存储在变量或者文件中,可以保存当时对象的状态,实现其生命周期的延长。并且需要时可以再次将这个对象读取出来。Python中有几个常用模块可实现这一功能。

所谓的序列化其实将对象字符串化,从而可以以多种形式存储,如存储在文件中,反序列化为执行相反的操作。

json模块:用于不同语言之间的交互

用到的属性:dumpsdump loadsload

将列表形式数据序列化:

import json as j
lst = ['kill','nwc','hello word','china']
lst_j = j.dumps(lst)
print(lst_j) #序列化
print(lst) #原列表
print(j.loads(lst_j)) #反序列化

["kill", "nwc", "hello word", "china"]
['kill', 'nwc', 'hello word', 'china']
['kill', 'nwc', 'hello word', 'china']

import json as j
lst = ['kill','nwc','hello word','china']
lst_j = j.dumps(lst)
# print(lst_j) #序列化
# print(lst) #原列表
# print(j.loads(lst_j)) #反序列化

with open('d:json.txt','w',encoding= 'utf-8') as f:
    f.write(lst_j)

import json as j
lst = ['kill','nwc','hello word','china']
with open('d:json.txt','r',encoding= 'utf-8') as f:
    print(j.loads(f.read())) #从文件读取反序列化
print(lst)

['kill', 'nwc', 'hello word', 'china']
['kill', 'nwc', 'hello word', 'china']

涉及到文件读写相关序列化的操作可以用loaddump代替loadsdumps

import json as j
lst = ['kill','nwc','hello word','china']
with open('d:json1.txt','w',encoding= 'utf-8') as f:
    j.dump(lst,f)
with open('d:json1.txt', 'r', encoding='utf-8') as f:
    print(j.load(f))

['kill', 'nwc', 'hello word', 'china']

pickle模块:用到的属性与json模块一样都为dumpdumps、loadloads,使用的方法一致,不同的是pickle模块可以序列化函数等对象,而json模块无法直接序列化函数

序列化函数

import pickle as j
def func():
    print('hello world!')
with open('d:json3.txt','wb') as f:
    j.dump(func,f) #序列化函数并存储在文件中
with open('d:json3.txt','rb') as f:
    aa = j.load(f) #反序列化函数并赋给aa
    aa()    #调用函数   

hello world!

原文地址:https://www.cnblogs.com/anner-nie/p/8452160.html