首页 > 编程知识 正文

python jsonpath(js对象序列化)

时间:2023-05-03 13:12:52 阅读:82046 作者:4782

在以往利用python进行数据质量分析的过程中,经常会遇到根据相同的中间结果来进行不同维度的分析统计的情况。 最初有每次从头计算的想法,但以TB级别的数据为背景,发现该操作非常浪费计算力,需要数据的序列化、持久化。

在实际的APP应用中,也曾分别使用pickle、json、shelve实现了数据的序列化。 接下来,我将向大家分享这三个具体的应用和异同。

简单地说,这三个都可以实现Python许多对象的序列化(持久化),但实现和应用的背景不同。 序列化的好处是将计算过程中获得的数据永久保存,重复使用时直接用load将数据加载到内存中即可,避免中间结果的重新计算和数据格式的重新转换。

cpickle

python通常使用pickle类来序列化python对象。 此外,cpickle(c语言编译版本)还提供了: ' c pickleafasterpickle ',如官方文档中所述。 其速度大概是pickle的速度

cPickle可以对任何类型的python对象(如list、dict或类的对象)执行序列化操作。

cPickle使用以下方法将数据持久化到文件中:

dump函数——序列化

必须指定两个参数。 第一个是需要序列化的python对象名称,第二个是本地文件,需要使用open函数以“写”模式打开文件。

导入c图片

seasons=['Spring ',' Summer ',' Fall ',' Winter']

seasons _ dict=dict ([ (索引,season )为索引,seasoninenumerate ) ]

c pickle.dump (会话光盘,打开) '数据拾取',' wb ' )

二进制格式的data.pickle文件

load函数——反序列化

加载本地文件,并将其作为python对象加载。 加载的对象不需要进行格式转换。 如果通过常用的写入方式实现数据的永久化,则在读取数据时,需要添加数据类型的转换。

data=c pickle.load (打开(' data.pickle ',' rb ' ) )

打印数据,一次性(数据,光盘)。

输出功率

请注意,cPickle是python2的库,在python3.x版本中被改名为pickle。

缺点

pickle模块使用的数据格式专用于python,根据版本不同而向后不兼容,并且其他语言无法识别。 使用pickle有安全风险。 请勿反序列化不信任或未经验证的pickle字节串,如从代码中获取文件列表或获取权限:import os (如文件操作)

导入c图片

类出口(对象) :

def _ _ reduce _ (自我) :

返回(操作系统,) '灾难,) )

shellcode=c pickle.dumps (导出()

打印c图片代码(shellcode ) )。

输出功率

已获取当前目录的文件列表

因此,pickle方案不适合网络通信,可以切换到其他序列化方法,如JSON。 在

json

json模块中,通过将数据保存到文件并直接从文件读取数据来执行反序列化操作。

dump函数——序列化

将Python对象转换为json字符串并将其保存到文件中

导入JSON

seasons=['Spring ',' Summer ',' Fall ',' Winter']

seasons _ dict=dict ([ (索引,season )为索引,seasoninenumerate ) ]

withopen(dump.JSON (,w ) ) as json_dump:

JSON.dump(seasons_dict,json_dump,索引=4) )。

pgc-image/cdfc95387517410fb85a138834380ac2?from=pc">

dump.json

load函数——反序列化

读取指定文件中的json字符串并转换成Python对象

with open('dump.json', 'r') as json_load: content = json.load(json_load) print content ,isinstance(data,dict)

输出

pickle与json区别

json是一种文本序列化格式,能够读懂,而pickle是一个二进制序列化格式,无法读懂;json是与特定的编程语言或系统无关的,且它在Python生态系统之外被广泛使用,而pickle使用的数据格式是特定于Python的pickle可以直接操作大量的Python数据类型,json只能表示Python内建数据类型。

shelve模块

shelve模块其内部是通过pickle协议来实现数据序列化,是一个简单的数据存储方案,类似字典的key-value数据库(key必须是字符串,value可以是任意数据类型),可以很方便的保存python字典对象,这个函数接收一个参数就是文件名。我们可以把shelf对象当dict来使用--存储、更改、查询某个key对应的数据,当操作完成之后,调用shelf对象的close()函数即可。

数据持久化至文件

import shelve seasons = ['Spring', 'Summer', 'Fall', 'Winter'] seasons_dict = dict([(str(index),season) for index,season in enumerate(seasons)]) shelve_dump = shelve.open('dump.shelve')#默认读写模式打开 shelve_dump.update(seasons_dict) shelve_dump.close()

数据加载至内存

shelve_dump = shelve.open('dump.shelve')#默认读写模式打开 print shelve_dump

输出

dump.shelve

数据修改或更新

shelve_dump = shelve.open('dump.shelve',writeback=True) shelve_dump["1"]= 'Winter' shelve_dump.update({'4':'Spring'}) print shelve_dump

输出

pickle、json、shelve应用场景

1.需要与外部程序其他语言或不同版本的python程序交互时,可以考虑用json模块

2.需要将少量Python数据持久化到文件时,可以考虑用pickle模块;

3.需要将大量Python数据持久化到文件或需要对持久化对象进行增删改等操作时,可以考虑用shelve模块。

转载请说明,若对你有帮助,点赞支持哦。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。