Python如何将一个zip文件复制到内存中的另一个zip文件?

2024-06-26 14:06:08 发布

您现在位置:Python中文网/ 问答频道 /正文

目的

将一个zip归档文件拆分为更小的zip归档文件,每个新的zip文件平均分布有#个文件。在

示例

源zip(100个文件)

  • src/100型-测试.zip在

目标ZIP(每个25个文件):

  • 目的地/1.zip
  • 目的地/2.zip
  • 目的地/3.zip
  • 目的地/4.zip

说明

因此,我可以打开zip文件并遍历这些内容以将其拆分,但我无法写入该文件。既然我没有对压缩内容做任何事情,我就不认为我必须做任何StringIO的东西或其他什么?在

编码

zipFileNameSrc = '100-Test.zip'
zipFile = open(zipFileNameSrc)
unzippedFile = zipfile.ZipFile(zipFile)
imgList = [(s, unzippedFile.read(s)) for s in unzippedFile.namelist() if (".jpg" or ".JPG") in s]
#image names: imgList[i][0]  and  images: imgList[i][1]

#...
#...additional logic to split into sets of 25 images
#...fileTuplesList = imgList[:25]
zipNo = 1
#zipFileDest = destination + "/" + zipSrcNm + "/" + zipNo.__str__() + ".zip"
zipFileName = zipNo.__str__() + ".zip"
zipOut = zipfile.ZipFile(zipFileName, 'w')
for i in xrange(len(fileTuplesList)):
    fileNameAndPath = fileTuplesList[i][0]
    actualFile = fileTuplesList[i][1]
    zipOut.write(fileNameAndPath, actualFile)
zipOut.close()
#move_files(zipFileName, zipFileDest)

错误

我在zipOut.write(fileNameAndPath, actualFile)上查到这个

OSError: [Errno 2] No such file or directory: '100-Test/17.jpg'

奖金

如何将zip文件保存到与脚本所在位置不同的文件夹中?在


Tags: 文件intest内容zip目的地imglistfiletupleslist
2条回答

^{}需要一个文件名作为第一个参数,该文件应该存在于系统中。如果是,则将该特定文件复制到zip存档中。在

实际上,您需要使用-^{}-它期望archivename作为第一个参数,data作为第二个参数。在

另外,您可以在任何地方创建zip归档文件,只需在创建zipFileName时使用os.path.join()将目录加入到zip文件名中。执行所需操作的示例代码-

import os.path
zipFileNameSrc = '100-Test.zip'
zipFile = open(zipFileNameSrc)
unzippedFile = zipfile.ZipFile(zipFile)
imgList = [(s, unzippedFile.read(s)) for s in unzippedFile.namelist() if (".jpg" or ".JPG") in s]
#image names: imgList[i][0]  and  images: imgList[i][1]

#...
#...additional logic to split into sets of 25 images
#...fileTuplesList = imgList[:25]
zipNo = 1
#zipFileDest = destination + "/" + zipSrcNm + "/" + zipNo.__str__() + ".zip"
zipFileName = os.path.join('<directory for zip>',zipNo.__str__() + ".zip")
zipOut = zipfile.ZipFile(zipFileName, 'w')
for i in xrange(len(fileTuplesList)):
    fileNameAndPath = fileTuplesList[i][0]
    actualFile = fileTuplesList[i][1]
    zipOut.writestr(fileNameAndPath, actualFile)
zipOut.close()

在我的系统中工作的示例/演示代码-

^{pr2}$

你有zipOut.写()参数向后。第一个参数是您希望写入的文件,第二个参数是您希望给文件指定的名称(您也可以将其留空,它只会自己使用文件名)。在

fileNameAndPath = fileTuplesList[i][0]
actualFile = fileTuplesList[i][1]
zipOut.write(fileNameAndPath, actualFile)

https://docs.python.org/3.4/library/zipfile.html#zipfile.ZipFile.write

^{pr2}$

将名为filename的文件写入归档文件,并为其指定存档名称arcname(默认情况下,这与filename相同,但没有驱动器号,并且删除了前导路径分隔符)。如果给定,compress_type将重写为新项的构造函数提供的压缩参数值。存档必须以“w”或“a”模式打开-对使用“r”模式创建的ZipFile调用write()将引发运行时错误。对关闭的ZipFile调用write()将引发运行时错误。在

相关问题 更多 >