我正在使用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,只是将其作为存储文件压缩。
有什么想法吗?
答案 0 :(得分:5)
这是在Windows上吗?也许试试f = open(dest, 'wb')
仅在Windows上,b
使文件系统将文件视为二进制文件而不是纯文本,而不是使用行结尾。在其他系统上,没有区别(b
被默默忽略)。