我有一堆 json 对象 需要压缩,因为它占用了太多磁盘空间,大约 20 gigs
值(value)几百万。
理想情况下,我想做的是分别压缩每个文件,然后当我需要阅读它们时,只需反复加载和解压缩每个文件。我尝试通过 zlib 创建一个文本文件,每一行都是一个压缩的 json 对象 来做到这一点,但这失败了
由于流被截断导致解压缩错误
,
我认为这是由于包含新行的压缩字符串。
有人知道这样做的好方法吗?
最佳答案
只需使用 gzip.GzipFile()
object并将其视为普通文件;逐行写入 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
这还有一个额外的好处,即压缩算法可以利用跨对象的重复来提高压缩率。
关于python - 在保持串行读取的同时压缩一系列 JSON 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20449625/