Zipfile Python模块字节大小差异

2 投票
1 回答
692 浏览
提问于 2025-04-16 23:42

我正在使用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()

这个zip文件是用普通的Deflate压缩的,我甚至尝试过用7-zip仅仅将其作为存储文件进行ZIP_STORED压缩。

有没有什么想法?

1 个回答

5

这是在Windows系统上吗?可以试试 f = open(dest, 'wb') 这个写法。

在Windows系统中,b 这个字母的作用是告诉电脑把文件当成二进制文件来处理,而不是普通文本文件,这样就不会对换行符进行任何修改。在其他系统上,这个 b 就没有什么作用(电脑会默默忽略它)。

撰写回答