response = requests.get('http://content.warframe.com/PublicExport/index_en.txt.lzma')
data = lzma.decompress(response.content)
我得到的错误是:
_lzma.LZMAError: Corrupt input data
我认为数据没有损坏,因为我可以从浏览器下载并使用7zip正确提取它。我已经尝试在网上寻找解决方案,但似乎关于这个问题的信息不是很多。我也尝试了另一种解压方式,但没有成功。(Python LZMA: 压缩数据在到达流结束标记之前就已经结束)
编辑:这是目前“可行”的解决方案。基本上,删除末尾并忽略EOF错误。
def fix():
response = requests.get('http://content.warframe.com/PublicExport/index_en.txt.lzma')
data = response.content
byt = bytes(data)
length = len(data)
stay = True
while stay:
stay = False
try:
decompress_lzma(byt[0:length])
except LZMAError:
length -= 1
stay = True
print(decompress_lzma(byt[0:length]))
# FROM: https://dev59.com/spffa4cB1Zd3GeqP6Vb0#37400585
def decompress_lzma(data):
results = []
while True:
decomp = LZMADecompressor(FORMAT_AUTO, None, None)
try:
res = decomp.decompress(data)
except LZMAError:
if results:
break # Leftover data is not a valid LZMA/XZ stream; ignore it.
else:
raise # Error on the first iteration; bail out.
results.append(res)
data = decomp.unused_data
if not data:
break
if not decomp.eof:
raise LZMAError("Compressed data ended before the end-of-stream marker was reached")
return b"".join(results)