我在python 2.7上做了一个脚本,用于使用zlib解压缩文件。我在Linux上使用它并且它正在工作,但是当我尝试在Windows上运行它时,我得到以下错误:
解压缩数据时出错-5:不完整或截断的流。
我正在使用此代码:
datosComprimidos = open(archivo).read()
datosDescomprimidos = zlib.decompress(datosComprimidos)
另外,我尝试了其他代码:
datosDescomprimidos = zlib.decompressobj().decompress(datosComprimidos, zlib.MAX_WBITS)
但在这种情况下,它在datosDescomprimidos上没有写任何内容。
任何人都知道一些事情吗?谢谢
是的,因为
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()
所以我们控制文件何时关闭(退出块时)