在python3中包含JSON数据的不同压缩方法

时间:2017-06-01 11:18:18

标签: python json compression gzip

所以,我想用不同的压缩器压缩我的JSON数据。我用它来压缩JSON。

import gzip
import JSON

with gzip.GzipFile('2.json', 'r') as isfile:
    for line in isfile:
        obj = json.loads(line)

会引发错误。

raise OSError('Not a gzipped file (%r)' % magic)

OSError: Not a gzipped file (b'[\n')

我也尝试使用直接压缩。

zlib_data= zlib.compress(data)

会引发错误。

return lz4.block.compress(*args, **kwargs)

TypeError: a bytes-like object is required, not 'list'

所以,基本上我想使用所有方法压缩JSON,并计算不同方法压缩所需的时间。

1 个答案:

答案 0 :(得分:1)

在python2.7

这似乎是您数据类型的问题

要压缩的数据应该是' str'输入

import gzip
import json
import lz4
import time

with gzip.GzipFile('data.gz','w') as fid_gz:
    with open('data.json','r') as fid_json:
        # get json as type dict
        json_dict = json.load(fid_json)
        # convert dict to str
        json_str = str(json_dict)
    # write string
    fid_gz.write(json_str)

# check well maded
with gzip.GzipFile('data.gz','r') as fid_gz :
    print(fid_gz.read())

即使是gzip压缩

gzip.zlib.compress(json_str,9)

即使lz4压缩

lz4.block.compress(json_str)

和时间检查

# set start time
st = time.time()
# calculate elasped time
print(time.time() - st)

在python3.5

python2.7和python 3之间的区别是要压缩的数据类型

要压缩的数据应该是'字节'通过bytes()

输入

制作.gz文件时

with gzip.GzipFile('data.gz','w') as fid_gz:
    with open('data.json','r') as fid_json:
        json_dict = json.load(fid_json)
        json_str = str(json_dict)
        # bytes(string, encoding)
        json_bytes = bytes(json_str,'utf8')
    fid_gz.write(json_bytes)

或只使用gzip.compress进行压缩(data,compresslevel = 9)

# 'data' takes bytes
gzip.compress(json_bytes)

或只使用zlib.compress(bytes,level = -1,/)压缩

gzip.zlib.compress(json_bytes,9)

或只使用lz4.bloc.compress(source,compression = 0)压缩

# 'source' takes both 'str' and 'byte'
lz4.block.compress(json_str)
lz4.block.compress(json_bytes)

测量时间取决于您的意图。

欢呼声