Zlib解压缩脚本在Linux上工作,但不在Windows上:解压缩数据时出错:不完整或截断流

问题描述 投票:2回答:1

我在python 2.7上做了一个脚本,用于使用zlib解压缩文件。我在Linux上使用它并且它正在工作,但是当我尝试在Windows上运行它时,我得到以下错误:

解压缩数据时出错-5:不完整或截断的流。

我正在使用此代码:

datosComprimidos = open(archivo).read() datosDescomprimidos = zlib.decompress(datosComprimidos)

另外,我尝试了其他代码:

datosDescomprimidos = zlib.decompressobj().decompress(datosComprimidos, zlib.MAX_WBITS)

但在这种情况下,它在datosDescomprimidos上没有写任何内容。

任何人都知道一些事情吗?谢谢

linux windows python-2.7 zlib
1个回答
-1
投票

是的,因为

datosComprimidos = open(archivo).read()

以文本模式返回打开的数据。您需要以二进制模式读取它:

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()

所以我们控制文件何时关闭(退出块时)

© www.soinside.com 2019 - 2024. All rights reserved.