Python在两个zip文件之间传输文件

时间:2015-04-13 22:05:52

标签: python transfer zipfile

我一直在尝试使用内置的python zipfiles模块来操作windows上的一些.zip文件,我希望用它们来存储一些与程序中当前项目相关的文件。当我从zip加载文件然后希望将它们重新保存到一个新的不同的zip文件时出现问题:

import zipfile
zp = zipfile.ZipFile(r"first.zip",mode='r')
myfile = zp.open(r"stored_file.txt",mode='r')

### Do something, then want to save again ###

zp2 = zipfile.ZipFile(r"second.zip",mode='w')

#Doesn't work, as myfile isn't a real file:
zp2.write(myfile)
#Doesn't work, as the path can't be resolved:
zp2.write(os.path.join(zp.filename,myfile.name))
#The following works... as long as you haven't called read()
#since .seek(0) doesn't work for ZipExtFile
zp2.writestr(myfile.name,myfile.read())

当然,我可以将文件解压缩到某个地方,然后将它们重新添加到新的zip中,但它会很笨重,需要大量清理(并创建大量临时文件)。

同样我可以跟踪原始zip文件并通过重新打开文件来使用writestr方法,但我希望避免它。我只是想知道是否有更好的方法解决这个问题;这意味着我必须有代码来确定文件是否最初来自zip或者不是拉链,如果有的话也会以不同方式处理。

编辑:如果其他人的最终问题是seek(0)没有在ZipExtFile上工作,可以使用io.StringIO类来保存str(myfile.read())的结果,然后可以查找。这意味着我必须将文件保存在内存中,所以我将继续跟踪zip文件并仅在我需要时传输它们。

0 个答案:

没有答案