因此,我正在使用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)
这非常有效,允许我在使用文件f
进行json
转储和加载之前使用with openZstd('filename.zst', 'rb') as f:
。
然而,我在将其推广到写作时遇到了一些问题,我已经尝试了按照我到目前为止所做的方式来遵循文档,但是有些东西不起作用。以下是我尝试过的:
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)
操作时,由于某种原因,该文件最终为空。我猜其中一个步骤是吞咽我的输入,但不知道可能是什么
正如jasonharper在评论中所建议的,您必须刷新
io
包装器和编写器本身,如下所示:这将导致文件中的数据和文件完整
相关问题 更多 >
编程相关推荐