2

我正在使用 python 的 zipfile 模块来提取我从互联网上检索到的 zipfile

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

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

有任何想法吗?

4

1 回答 1

5

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

仅在 Windows 上,这b使得文件系统将文件视为二进制而不是纯文本,并且不会弄乱行尾。在其他系统上,没有区别(并且b被默默地忽略)。

于 2011-08-16T18:05:40.430 回答