减压不适用于自己的文件



我是Python编程语言的新手,我遇到了模块Zstandard的问题。我目前正在与Halite的Replayfiles合作。由于它们被Zstandard压缩,因此我必须使用此模块。如果我读了一个文件,一切都很好!我可以解压缩" .hlt"文件。

,但是我已经对JSON数据进行了一些转换,我想在磁盘上保存以稍后使用。我发现再次将数据再次压缩的数据非常有用,因此我使用了压缩机。压缩也可以正常工作。但是,如果我打开文件我刚刚创建的文件,我会收到一条错误消息,读取:" zstd.zstderror:decompression错误:未知帧描述符"。

在下面的我的代码上查看:

def getFileData(self, filename):
    with open(filename, "rb") as file:
        data = file.read()
    return data
def saveDataToFile(self, filename, data):
    with open(filename, "bw") as file:
        file.write(data)
def transformCompressedToJson(self, data, beautify=0):
    zd = ZstdDecompressor()
    decompressed = zd.decompress(data, len(data))
    return json.loads(decompressed)
def transformJsonToCompressed(self, jsonData, beautify=0):
    zc = ZstdCompressor()
    if beautify > 0:
        jsonData = json.dumps(jsonData, sort_keys=True, indent=beautify)
    objectCompressor = zc.compressobj()
    compressed = objectCompressor.compress(jsonData.encode())
    return objectCompressor.flush()

我在这里使用它:

rp = ReplayParser()
gameDict = rp.parse('replays/replay-20180215-152416+0100--4209273584-160-160-278627.hlt')
compressed = rp.transformJsonToCompressed(json.dumps(gameDict, sort_keys=False, indent=0))
rp.saveDataToFile("test.cmp", compressed)
t = rp.getFileData('test.cmp')
j = rp.transformCompressedToJson(t) -> Here is the error
print(j)

函数 rp.parse(..(只是转换数据 - 因此它只是创建一个字典。。

希望你们可以帮助我。

grethings,

noxes

transformJsonToCompressed()中,您丢弃了.compress()方法的结果(这可能是输出数据的大部分(,而仅返回.flush()的结果只是缓冲区中剩下的最后一点数据(。使用这样的压缩库的正常方法是将每个压缩数据的每个块直接写入生成的输出文件。您的代码没有结构化允许(该函数对数据将被写入的文件一无所知(,因此您可以将压缩数据的两个块加成。

最新更新