Zlib 解压缩脚本在 linux 上工作但不在 windows 上工作:解压缩数据时出现错误 -5:流不完整或被截断
Zlib decompress script working on linux but not on windows: error -5 while decompressing data: incomplete or truncated stream
我在 python 2.7 上编写了一个脚本,用于使用 zlib 解压缩文件。
我已经在 Linux 上使用它并且它正在工作,但是当我尝试在 windows 上使用它时 运行 我收到以下错误:
Error -5 while decompressing data: incomplete or truncated stream.
我正在使用此代码:
datosComprimidos = open(archivo).read()
datosDescomprimidos = zlib.decompress(datosComprimidos)
此外,我已经尝试了其他代码:
datosDescomprimidos = zlib.decompressobj().decompress(datosComprimidos, zlib.MAX_WBITS)
但在这种情况下,它不会在 datosDescomprimidos 上写入任何内容。
有人知道吗?
谢谢
是的,因为
datosComprimidos = open(archivo).read()
returns数据以text方式打开。您需要以二进制模式阅读它:
datosComprimidos = open(archivo,"rb").read()
它在 Linux 上无关紧要,但它在 Windows 上很重要,因为否则,所有 10
值都以 13
值作为前缀并且它会损坏数据(在 LF 之前添加 CR 以 windows 文本兼容不适用于二进制流!)
作为奖励,您的代码现在 python 3 兼容。
请注意,在 with
块中使用它会更 pythonic:
with open(archivo,"rb") as f:
datosComprimidos = f.read()
所以我们控制文件何时关闭(退出块时)
我在 python 2.7 上编写了一个脚本,用于使用 zlib 解压缩文件。 我已经在 Linux 上使用它并且它正在工作,但是当我尝试在 windows 上使用它时 运行 我收到以下错误:
Error -5 while decompressing data: incomplete or truncated stream.
我正在使用此代码:
datosComprimidos = open(archivo).read()
datosDescomprimidos = zlib.decompress(datosComprimidos)
此外,我已经尝试了其他代码:
datosDescomprimidos = zlib.decompressobj().decompress(datosComprimidos, zlib.MAX_WBITS)
但在这种情况下,它不会在 datosDescomprimidos 上写入任何内容。
有人知道吗? 谢谢
是的,因为
datosComprimidos = open(archivo).read()
returns数据以text方式打开。您需要以二进制模式阅读它:
datosComprimidos = open(archivo,"rb").read()
它在 Linux 上无关紧要,但它在 Windows 上很重要,因为否则,所有 10
值都以 13
值作为前缀并且它会损坏数据(在 LF 之前添加 CR 以 windows 文本兼容不适用于二进制流!)
作为奖励,您的代码现在 python 3 兼容。
请注意,在 with
块中使用它会更 pythonic:
with open(archivo,"rb") as f:
datosComprimidos = f.read()
所以我们控制文件何时关闭(退出块时)