首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用zstandard在Python中压缩文件

使用zstandard在Python中压缩文件
EN

Stack Overflow用户
提问于 2020-10-23 02:23:58
回答 1查看 417关注 0票数 2

因此,我使用了zstandard python库,并编写了一个帮助器类和函数来使用上下文来解压缩文件。

代码语言:javascript
复制
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)

这真的很好用,并且允许我在使用文件f进行json转储和加载之前只使用with openZstd('filename.zst', 'rb') as f:。然而,我在将其推广到编写时遇到了问题,我尝试以与目前为止相同的方式遵循文档,但有些东西不起作用。这是我尝试过的:

代码语言:javascript
复制
class ZstdWriter:
    def __init__(self, filename):
        self.filename = filename

    def __enter__(self):
        self.f = open(self.filename, 'wb')
        ctx = zstd.ZstdCompressor()
        writer = ctx.stream_writer(self.f)
        return io.TextIOWrapper(writer, encoding='utf-8')

    def __exit__(self, *a):
        self.f.close()
        return False

当我使用这个类打开一个文件,并执行json.dump([], f)时,由于某种原因,该文件最终是空的。我猜其中一个步骤是接受我的输入,但不知道它可能是什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-24 22:40:05

正如jasonharper在评论中建议的那样,您必须同时刷新io包装器和编写器本身,如下所示:

代码语言:javascript
复制
s = json.dumps({})
iw = io.TextIOWrapper(writer, encoding="utf-8")
iw.write(s)

iw.flush()
writer.flush(zstd.FLUSH_FRAME)
f.close()

这会导致数据在文件中,并且文件是完整的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64488350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档