Zipfile python模块的字节大小差异

时间:2011-08-16 17:34:22

标签: python zip byte zipfile

我正在使用python的zipfile模块来提取我使用

从互联网上检索到的zip文件

urllib.urlretrieve()

zip文件中的文件是由bsdiff创建的补丁文件,但是当我让python解压缩zip文件并尝试使用bspatch时,它说损坏的补丁文件。当我使用7-zip手动提取zip文件时,覆盖补丁文件,然后运行修补程序,它可以很好地修补。我还注意到手动覆盖这些文件时,字节大小不同。

一个应该是195个字节但是196个字节,一个应该是20656个字节,但是是20781个字节,一个是正确的大小(这是唯一一个没有损坏补丁消息的补丁)

我用来提取的代码是:

z = zipfile.ZipFile('patchfiles.zip', 'r', zipfile.ZIP_DEFLATED)
    z.printdir()
    for info in z.infolist():
        if not os.path.isdir(patchdir):
                    os.mkdir(patchdir)
        fname = info.filename
        data = z.read(fname)
        dest = os.path.join(patchdir, fname)
        data = z.read(fname)
        f = open(dest, 'w')
        f.write(data)
        f.close()
    z.close()

使用普通的Deflate压缩zip文件,我甚至尝试使用带有7zip的ZIP_STORED,只是将其作为存储文件压缩。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

这是在Windows上吗?也许试试f = open(dest, 'wb')

仅在Windows上,b使文件系统将文件视为二进制文件而不是纯文本,而不是使用行结尾。在其他系统上,没有区别(b被默默忽略)。