我对 python 编程语言非常陌生,我遇到了模块 zstandard 的问题。我目前正在使用 Halite 的重播文件。因为它们是用 zstandard 压缩的,所以我必须使用这个模块。如果我读了一个文件,一切都很好!我可以解压缩“.hlt”文件。
但是我已经对要保存在磁盘上以供以后使用的 json 数据进行了一些转换。我发现再次存储压缩数据非常有用,所以我使用了压缩器。压缩也很好。但是,如果我再次打开刚刚创建的文件,我会收到一条错误消息:“zstd.ZstdError: decompression error: Unknown frame descriptor”。
看看我下面的代码:
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(..)只是转换数据 - 所以它只是创建一个字典 .. rp.parse(..)函数也调用transformCompressedToJson,所以它适用于 hlt 文件。
希望你们能帮助我解决这个问题。
问候,
噪声