• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

内存中数据序列化实例

python 搞代码 4年前 (2022-01-09) 30次浏览 已收录 0个评论

一、用途

  我们需要将内存中的数据进行序列化,即写入文件中时,写入的类型只能是字符串或者二进制类型。但是如果我们想要将复杂一些的数据类型,如:列表、字典或者函数之类的同样进行序列化,我们就要用到 json或者pickle。

二、json序列化

1、dumps序列化和loads反序列化

dumps把数据类型转换成字符串

import jsoninfo = {    'name': 'The Count of Monte Cristo',    'type': 'Movie'}data = json.dumps(info)print(data)print(type(data))# 输出{"name": "The Count of Monte Cristo", "type": "Movie"}<class 'str'>

loads把字符串转换成数据类型

import jsonget_info = json.loads(data)print(get_info['name'])print(get_info)print(type(get_info))#输出The Count of Monte Cristo{'name': 'The Count of Monte Cristo', 'type': 'Movie'}<class 'dict'> 

2.dump序列化和load反序列化

dump把数据类型转换成字符串并存储在文件中

import jsoninfo = {    'name': 'The Count of Monte Cristo',    'type': 'Movie'}with open("test.txt", "w", encoding="utf-8") as f:    json.dump(info, f)  # 第一个参数是内存中的数据对象,第二个参数是文件句柄#写入文件中的内容{"name": "The Count of Monte Cristo", "type": "Movie"}

load把文件打开从字符串转换成数据类型

import jsonwith open("test.txt", "r", encoding="utf-8") as f:    data_from_file = json.load(f)print(data_from_file['name'])print(data_from_file)print(type(data_from_file))#输出The Count of Monte Cristo{'name': 'The Count of Monte Cristo', 'type': 'Movie'}<class 'dict'>

3.json序列化一个函数

import jsondef test(name):    print("hello,{}".format(name))info = {    'name': 'The Count of Monte Cristo',    'type': 'Movie',    'func': test}data = json.dumps(info)#输出 File "G:/python/untitled/study6/json&pickle模块.py", line 22, in <module>    data = json.dumps(info)  File "G:\python\install\lib\json\__init__.py", line 230, in dumps    return _default_encoder.encode(obj)  File "G:\python\install\lib\json\encoder.py", line 198, in encode    chunks = self.iterencode(o, _one_shot=True)  File "G:\python\install\lib\json\encoder.py", line 256, in iterencode    return _iterencode(o, 0)  File "G:\python\install\lib\json\encoder.py", line 179, in default    raise TypeError(repr(o) + " is not JSON serializable")TypeError: <function test at 0x0000021B13C57F28> is not JSON serializable

1、json只能处理简单的数据类型,例如:字典、列表、字符串等,不能处理函数等复杂的数据类型。

2、json是所有语言通用的,所有语言都支持json,如果我们需要python跟其他语言进行数据交互,那么就用json格式

 

三、pickle序列化

pickle

本文来源gao!%daima.com搞$代*!码9网(

的用法和上面的相同,但是pickle序列化后的数据类型是二进制的,并且pickle只能在python中是使用。

1.dumps && loads

import pickledef test(name):    print("hello,{}".format(name))info = {    'name': 'The Count of Monte Cristo',    'type': 'Movie',    'func': test}data = pickle.dumps(info)print(data)print(type(data))#输出b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x19\x00\x00\x00The Count of Monte Cristoq\x02X\x04\x00\x00\x00typeq\x03X\x05\x00\x00\x00Movieq\x04X\x04\x00\x00\x00funcq\x05c__main__\ntest\nq\x06u.'<class 'bytes'>
import pickleget_data = pickle.loads(data)get_data['func']('cat')print(get_data)#输出hello,cat{'name': 'The Count of Monte Cristo', 'type': 'Movie', 'func': <function test at 0x00000235350A7F28>}

2. dump && load

import pickledef test(name):    print("hello,{}".format(name))info = {    'name': 'The Count of Monte Cristo',    'type': 'Movie',    'func': test}with open('test.txt', 'wb') as f:    pickle.dump(info, f)# 写入test.txt文件中的内容�}q (X   typeqX   MovieqX   funcqc__main__testqX   nameqX   The Count of Monte Cristoqu.
import picklewith open('test.txt', 'rb') as f:    get_data = pickle.load(f)print(get_data)# 输出{'name': 'The Count of Monte Cristo', 'func': <function test at 0x000001BA2AB4D510>, 'type': 'Movie'}

总结:

  • json值支持简单的数据类型,pickle支持所有的数据类型。

  • pickle只能支持python本身的序列化和反序列化,不能用作和其他语言做数据交互,而json可以。

  • pickle序列化的是整个的数据对象,所以反序列化函数时,函数体中的逻辑变了,是跟着心的函数体走的。

以上就是内存中数据序列化实例的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:内存中数据序列化实例

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址