在保持串行读取的同时压缩一系列JSON对象?

发布于 2021-01-29 15:20:59

我有一堆需要压缩的 json对象 ,因为它占用了过多的磁盘空间,大约20 gigs价值几百万美元。

理想情况下,我想做的是分别压缩每个压缩文件,然后在需要阅读它们时,只需迭代地加载和解压缩每个压缩文件。我尝试通过创建一个文本文件来完成此操作,每行都是通过
zlib 压缩的 json对象 ,但这失败了。 __

decompress error due to a truncated stream

我认为这是由于包含新行的压缩字符串所致。

有人知道这样做的好方法吗?

关注者
0
被浏览
44
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    只需使用一个gzip.GzipFile()对象并将其视为常规文件即可;逐行写入JSON对象,然后逐行读取它们。

    该对象透明地负责压缩,并将缓冲读取,并根据需要解压缩卡盘。

    import gzip
    import json
    
    # writing
    with gzip.GzipFile(jsonfilename, 'w') as outfile:
        for obj in objects:
            outfile.write(json.dumps(obj) + '\n')
    
    # reading
    with gzip.GzipFile(jsonfilename, 'r') as infile:
        for line in infile:
            obj = json.loads(line)
            # process obj
    

    这具有额外的优势,即压缩算法可以利用对象 之间 的重复来获得压缩率。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看