python学习之 -- 数据序列化

json / pickle 数据序列化

序列化定义:把变量从内存中变成可存储或传输的过程称为序列化。
反序列化:把变量内容从序列化的对象重新读到内存里称为反序列胡。

序列化模块之--pickle
使用注意:在python3里,进行一次序列化后,然后在进行反序列化,不要重复多次序列化,否则无法进行反序列化。
pickle:是python独有的序列化模块,只能作用于python变量,是将数据对象转化为bytes。
功能:用于python特有的类型和python的数据类型间进行转换。
举例:
1 import pickle
2 d = {'name':'jeck','age':'22'}
3 print(pickle.dumps(d))
View Code
打印出:b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x08 #这里b代表为bytes
pickle的4个功能如下:
dumps , dump:进行序列化功能
loads , load:进行反序列化功能

序列化举例1:
dumps 序列化作用于变量,将传入的变量序列化为一个bytes,然后可以写入磁盘。
1 import pickle
2 d = {'name':'jeck','age':'22','工作':'IT'}
3 f = open('fname','wb') #必须以二进制读写
4 f.write(pickle.dumps(d))
5 f.close()
View Code
序列化举例2:
dump 直接将变量序列化到文件中
1 import pickle
2 d = {'name':'jeck','age':'22','工作':'IT'}
3 f = open('fname1','wb')
4 pickle.dump(d,f)
5 f.close()
View Code
反序列化举例1:
loads:把对象从磁盘读入内存时,先把内容读到一个bytes,然后用loads进行反序列化
1 import pickle
2     f = open('fname','rb')
3     print(pickle.loads(f.read())) #将bytes通过loads进行反序列化
4 f.close()
View Code
反序列化举例2:
load:直接将dump后的序列化文件进行反序列化载入。
1 import pickle
2     f = open('fname1','rb')
3     print(pickle.load(f))
4 f.close()
View Code
序列化模块之-- json
json:是个对象序列化的标准格式,用于在不同编程语言之间进行对象的传递。类似的有xml。
但和xml表现形式不同,json表现为一个字符串,xml是用标记标注的不易阅读。在速度上json也比xml快。
注意:一般用于序列化通用的列表,字典,等常用序列。如果要序列化python里的函数,类需要单独指定
方法和pickle一样,有:dumps,dump 进行序列化。loads,load 进行反序列化
功能:用于字符串和python数据类型间进行转换。
举例:json序列化后的格式为字符串
1 import json
2 d = {'name':'jeck','age':'22','工作':'IT'}
3 print(json.dumps(d))
4 print(type(json.dumps(d)))
View Code
打印:
{"name": "jeck", "age": "22", "\u5de5\u4f5c": "IT"}
<class 'str'>
序列化举例1:
dumps 序列化作用于变量,将传入的变量序列化为一个字符串,然后可以写入磁盘。
1 import json
2 d = {'name':'jeck','age':'22','工作':'IT'}
3 f = open('fname','w')
4 f.write(json.dumps(d))
5 f.close()
View Code
序列化举例2:
dump 直接将变量序列化到文件中
import json
d = {'name':'jeck','age':'22','工作':'IT'}
f = open('fname1','w')
json.dump(d,f)
f.close()
反序列化举例1:
loads:先读取对象,然后用loads进行反序列化
1 import json
2 f = open('fname','r')
3 print(json.loads(f.read())) #将字符串通过loads进行反序列化
4 f.close()
View Code
反序列化举例2:
load:直接将dump后的序列化文件进行反序列化载入。
1 import json
2 f = open('fname1','rb')
3 print(json.load(f))
4 f.close()
View Code
# 注意 json也可以序列化python中的函数和类,但是序列化后的数据只是函数或者类的结果数据。
举例序列化一个类:
1 import json
2 def fun(n):
3     return n
4 x = fun('jeck')
5 f = open('fname','w')
6 f.write(json.dumps(x,default=fun))  #default参数就是告知json如何进行序列化
7 f.close
View Code
一般通用方法为:
print(json.dumps(x, default=lambda obj: obj.__dict__))
其中的__dict__不需我们在类中定义,因为通常class的实例都有一个__dict__属性,它就是一个字典,用来存储实例变量.
当然函数和类序列化一般也不会使用。

在单独举例通过pickle对函数的序列化和反序列化举例
1:进行函数的序列化
1 import pickle
2 def fun(n):
3     return n
4 f = open('fname','wb')
5 f.write(pickle.dumps(fun))
6 f.close  #成功
View Code
2:进行反序列化
import pickle
f = open('fname','rb')
pickle.loads(f.read())
f.close
报错:AttributeError: Can't get attribute 'fun' on <module '__main__' from
是因为序列化后内存已释放这个函数的内存地址,所以报错。需要手工把这个函数添加到反序列化开头如下:
1 import pickle
2 def fun(n):
3     return n # 这个函数内容可以手工修改。
4 f = open('fname','rb')
5 print(pickle.loads(f.read()))
6 f.close
View Code
这样才可以实现函数的反序列化,个人觉得没啥意义。而且反序列化时可以先修改函数内容,这样反序列化出的内容就是修改后的内容。

注意:pickle和json的序列化和反序列化必须各自独自使用,不能相互混用。

转载于:https://www.cnblogs.com/zy6103/p/6837310.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python LSTM网络是一种用于开发深度学习序列预测模型的强大工具。LSTM代表长短期记忆,它是一种递归神经网络的变体,专门设计用于处理序列数据。相对于传统的递归神经网络,LSTM具有更强的记忆能力和更好的长期依赖性处理能力。 在开发深度学习序列预测模型的电子书中,使用Python LSTM网络具有很多优势。首先,Python是一种简单易用且广泛使用的编程语言,具有丰富的生态系统和强大的社区支持。这使得使用Python编写和调试LSTM网络变得更加容易和高效。 其次,Python提供了多个强大的深度学习框架,如TensorFlow、Keras和PyTorch等,这些框架都支持LSTM网络的实现和训练。它们提供了丰富的函数和API,可以方便地构建LSTM网络的结构,配置网络参数,并进行训练和预测。 另外,Python还提供了大量用于数据处理和可视化的库,如NumPy和Matplotlib等。这些库可以用来对输入数据进行预处理、特征提取和可视化,从而为LSTM网络提供更好的输入数据。 最后,Python的开源性质使得其他开发者可以共享他们开发的LSTM相关代码和模型。这些开源资源可以帮助读者更好地理解和应用LSTM网络,促进深度学习领域知识的传播和共享。 总之,开发深度学习序列预测模型的电子书使用Python LSTM网络是一种理想的选择。Python提供了丰富的工具和库,使得LSTM网络的开发和应用变得更加简单和高效。希望这本电子书能够帮助读者更好地理解和应用LSTM网络,进一步推动深度学习的发展和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值