如何解决使用zstandard在Python中压缩文件
因此,我正在使用zstandard
python库,并编写了一个帮助程序类和函数来使用上下文解压缩文件。
class ZstdReader:
def __init__(self,filename):
self.filename = filename
def __enter__(self):
self.f = open(self.filename,'rb')
dctx = zstd.ZstdDecompressor()
reader = dctx.stream_reader(self.f)
return io.TextIOWrapper(reader,encoding='utf-8')
def __exit__(self,*a):
self.f.close()
return False
def openZstd(filename,mode='rb'):
if 'w' in mode:
return ZstdWriter(filename)
return ZstdReader(filename)
这确实很好,并且允许我在将文件with openZstd('filename.zst','rb') as f:
用于f
转储和加载之前只使用json
。
但是我在将其推广到写作时遇到了问题,我尝试按照与到目前为止相同的方式遵循文档,但是某些方法不起作用。这是我尝试过的:
class ZstdWriter:
def __init__(self,'wb')
ctx = zstd.ZstdCompressor()
writer = ctx.stream_writer(self.f)
return io.TextIOWrapper(writer,*a):
self.f.close()
return False
当我使用此类打开文件并执行json.dump([],f)
时,由于某种原因该文件最终为空。我想其中一个步骤是吞没我的输入,但不知道它可能是什么。
解决方法
正如jasonharper在评论中所建议的,您必须刷新io
包装程序和编写器本身,如下所示:
s = json.dumps({})
iw = io.TextIOWrapper(writer,encoding="utf-8")
iw.write(s)
iw.flush()
writer.flush(zstd.FLUSH_FRAME)
f.close()
这将导致文件中包含数据,并且文件已完成。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。