所以,我想用不同的压缩器压缩我的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,并计算不同方法压缩所需的时间。
答案 0 :(得分:1)
这似乎是您数据类型的问题
要压缩的数据应该是' 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)
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)
测量时间取决于您的意图。
欢呼声