跳转到主要内容

读取和写入大型压缩JSON的缺失Python工具。

项目描述

compress_json

pip python license downloads Github Actions Codacy Badge

读取和写入大型压缩JSON的缺失Python工具。

该库基于compress_pickle库。

如何安装此包?

像往常一样,只需使用pip下载

pip install compress_json

可用的压缩模式

自动检测文件名的压缩模式为 gzipbz2lzma(或 xz),值得注意的是 zip,这似乎很难集成到JSON管道中。

使用示例

该库极其易于使用

import compress_json

D = {
    "A": {
        "B": "C"
    }
}
compress_json.dump(D, "filepath.json.gz")   # for a gzip file
compress_json.dump(D, "filepath.json.bz")   # for a bz2 file
compress_json.dump(D, "filepath.json.lzma") # for a lzma file
compress_json.dump(D, "filepath.json.xz") # for a lzma file

D1 = compress_json.load("filepath.json.gz")   # for loading a gzip file
D2 = compress_json.load("filepath.json.bz")   # for loading a bz2 file
D3 = compress_json.load("filepath.json.lzma") # for loading a lzma file
D3 = compress_json.load("filepath.json.xz") # for loading a lzma file

如果您必须加载或保存具有自定义扩展名的JSON对象,您可以通过将compression参数传递给loaddump方法来指定压缩模式

import compress_json

D = {
    "A": {
        "B": "C"
    }
}

compress_json.dump(D, "filepath.custom_extension1", compression="gzip")   # for a gzip file
compress_json.dump(D, "filepath.custom_extension2", compression="bz2")   # for a bz2 file
compress_json.dump(D, "filepath.custom_extension3", compression="lzma") # for a lzma file

D1 = compress_json.load("filepath.custom_extension1", compression="gzip")   # for loading a gzip file
D2 = compress_json.load("filepath.custom_extension2", compression="bz2")   # for loading a bz2 file
D3 = compress_json.load("filepath.custom_extension3", compression="lzma") # for loading a lzma file

assert D == D1 == D2 == D3

一些额外功能:本地加载和保存

除了JSON库的常规loaddump方法外,该库还提供了local_loadlocal_dump方法,允许您通过使用调用堆栈在调用它们的同一目录中加载和保存文件。

这特别有用,尤其是在加载包内的文件时。

import compress_json

D = {
    "A": {
        "B": "C"
    }
}
compress_json.local_dump(D, "filepath.json.gz")   # for a gzip file
compress_json.local_dump(D, "filepath.json.bz")   # for a bz2 file
compress_json.local_dump(D, "filepath.json.lzma") # for a lzma file

D1 = compress_json.local_load("filepath.json.gz")   # for loading a gzip file
D2 = compress_json.local_load("filepath.json.bz")   # for loading a bz2 file
D3 = compress_json.local_load("filepath.json.lzma") # for loading a lzma file

assert D == D1 == D2 == D3

使用RAM缓存加载

有时您需要多次加载压缩的JSON文件,并且可能希望将此文档放入缓存或类似的东西中。幸运的是,我们已经为此提供了此选项

import compress_json

# The first time you load the file, it will be cached in RAM
D1 = compress_json.load(
    "filepath.json.gz",
    use_cache=True
)

# The second time you load the file, it will be loaded from the cache
D2 = compress_json.local_load(
    "filepath.json.gz",
    use_cache=True
)

assert D1 == D2

高级使用

您可以传递参数到选定的压缩模式或JSON库。

通过json_kwargs参数,您可以选择传递给JSON库方法的任何kwargs,您可以通过运行help(json.dump)help(json.load)(根据您是保存还是加载JSON对象)来获取Python版本的这些kwargs。

同样,使用 compression_kwargs 参数,您可以指定任何需要转发到您打算使用的压缩库的参数,无论该库是 lzmagzip 还是 bz2,具体取决于您安装的版本。

无论您是在转储还是加载压缩的 JSON 对象,都可以通过运行 help(lzma.open)help(gzip.open)help(bz2.open) 来获取可以转发给压缩方法的参数列表。

import compress_json

D = {
    "A": {
        "B": "C"
    }
}
compress_json.dump(
    D, "filepath.json.gz",
    compression_kwargs={
        "compresslevel": 9 # The kwargs for gzip
    },
    json_kwargs={
        "indent": 4 # The kwargs for json
    }
)

D4 = compress_json.load(
    "filepath.json.gz",
    compression_kwargs={ 
        "compresslevel": 9 # The kwargs for gzip
    },
    json_kwargs={} # The kwargs for json
)

assert D == D4

许可证

该库采用 MIT 许可协议发布。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

compress_json-1.1.0.tar.gz (6.6 kB 查看哈希值)

上传时间 源代码

支持者