微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用zstandard在Python中压缩文件

如何解决使用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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?