一种在磁盘上存储大量json样式数据并快速访问它的方法。

jsop的Python项目详细描述


jsop-json风格的对象持久化

jsop是一个持久性引擎,允许应用程序在磁盘上存储大量json样式的数据,但要以有效的方式访问它。

它基于dbm模块,但是提供了一个更易于使用的api。

JSOP还旨在使数据在现有的应用程序中易于迁移,这些应用程序已经在JSON文件中存储数据,对代码的更改最小。

安装

pip3 install jsop

快速入门指南

创建新的jsop文件

编程:

# 'data' is any JSON-serializable object.importjsopjsop.JSOP("/path/to/jsop").init(data)

或从命令行:

python3 -m jsop init /path/to/jsop /path/to/data.json

(如果未提供初始json文件,则该文件将使用空映射进行初始化。)

读写

withjsop.JSOP("/path/to/jsop")asdata:name=data["name"]data["age"]=30forfriendindata["friends"]:print(friend["name"])

支持的操作

作业

您可以使用简单的赋值用jsop存储任何json可序列化数据。例如:

path="/path/to/jsop"jsop.JSOP(path).init()# initalize with an empty map.withjsop.JSOP(path)asdata:data["string"]="Hello, World!"data["boolean"]=Truedata["map"]={"a":1,"b":2,"c":3}data["map"]["d"]=4data["map"]["list"]=[5,6,7]
<> >一旦{{CD2>}块退出,文件将被保存。

访问数据

当您检索原始类型的数据时,只需获得相应的python类型:

withjsop.JSOP(path)asdata:my_string=data["string"]# type(my_string) is strmy_int=data["map"]["c"]# type(my_int) is int

但是,当您检索一个映射或列表时,您会得到特殊的对象,分别命名为JDictJList

地图操作

有了JDict,您可以用python做大多数事情dict

withjsop.JSOP(path)asdata:my_map=data["map"]# type(my_map) is JDicta=my_map["a"]# item accessmy_map["b"]=3# item assignmentdelmy_map["c"]# item removalif"d"inmy_map:pass# using the "in" operatorlength=len(my_map)# getting map's sizekeys=my_map.keys()# getting list of keysforkeyinmy_map:pass# iteration over keysifmy_map==my_map:pass# comparison with a JDictifmy_map=={"a":1,"b":3}:pass# comparison with a Python dictmy_map.clear()# removing all keys from a map

此外,还可以使用export()方法将映射转换为常规pythondict

withjsop.JSOP(path)asdata:my_map=data["map"].export()# type(my_map) is dictmy_map["e"]=5data["map"]=my_map

请注意,与json映射一样,jsop映射中的键始终是字符串。如果将另一个对象作为键给定,则将其转换为字符串。

列表操作

同样,JList对象支持python支持的许多操作list

withjsop.JSOP(path)asdata:my_list=data["map"]["list"]# type(my_list) is JListforiteminmy_list:pass# iteration over itemsmy_list.append(8)# adding an itemeight=my_list.pop()# removing (and returning) the last itemsix=my_list[1]# item access by indexmy_list[1]=9# item assignmentmy_list.remove(9)# removing an arbitrary itemif8inmy_list:pass# using the "in" operatorlength=len(my_list)# getting list's sizeifmy_list==my_list:pass# comparison with a JListifmy_list==[5,6,7]:pass# comparison with a Python listmy_list.clear()# removing all items from list

像在JDict中一样,JList也支持export()方法,它返回一个python list

withjsop.JSOP(path)asdata:my_list=data["map"]["list"].export()# type(my_list) is list

复制和备份

为了创建复制jsop文件,建议将其内容导出到json。原因是json文件占用的空间更少,而且还因为可共享性:这种做法避免了在不同系统上使用不同的dbm实现所带来的问题。

这可以从命令行完成:

python3 -m jsop export /path/to/jsop /path/to/copy.json

如果未给出json文件路径,则结果将打印到标准输出。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java客户端与服务器和JPA事务的对话   java Any DLL导入会抛出一个不满意的链接错误,尽管DLL似乎已加载   java如何获得只有他的电子邮件Firebase Realtime才知道的用户结构   PlayFramework2.0Java游戏!启动问题   java创建倒计时计时器   在java中按id排序Akka流   带有嵌入式Jetty静态资源的java Spring MVC   java如何避免Jackson获取标记为FetchType的字段。懒惰的   java Netbeans Ascii unicode字符不工作base64编码解码   JAVAME:对Java向量进行排序   适合java的设计模式   java ParDo函数未在Apache BEAM中等待窗口   从JNI调用main()入口点时,java new JFrame()崩溃   java试图理解JNI中的C函数调用。H   java如何在hibernate 5.3中使用键贡献类型   Javafx中屏幕之间的java参数   java将图像转换为SVG   java Read xls文件,API POI异常初始化记录0x203(NumberRecord),剩余4个字节尚待读取   swing将选项卡添加到jTabbedPane,其中每个选项卡都有一个名为java的文本区域   java While循环只在主体中运行一次