Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python如何将zip中的文件复制到内存中的另一个zip?_Python_Zip_Zipfile - Fatal编程技术网

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

Python如何将zip中的文件复制到内存中的另一个zip?,python,zip,zipfile,Python,Zip,Zipfile,目的 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: imgL

目的

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)
将一个zip归档文件拆分为更小的zip归档文件,每个新zip文件平均分布#个文件

示例

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)
源zip(100个文件)

  • src/100-Test.zip
目的地拉链(每个25个文件):

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

因此,我能够打开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]没有这样的文件或目录:“100 Test/17.jpg”

奖金

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

要求文件名作为第一个参数,并且该文件应存在于系统中。如果确实如此,则该特定文件将复制到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()
导入操作系统路径
zipFileNameSrc='100 Test.zip'
zipFile=打开(zipFileNameSrc)
解压文件=zipfile.zipfile(zipfile)
imgList=[(s,unzippedFile.namelist()中的s的unzippedFile.read(s)),如果s中的“.jpg”或“.jpg”]
#图像名称:imgList[i][0]和图像:imgList[i][1]
#...
#…将附加逻辑拆分为一组25个图像
#…fileTuplesList=imgList[:25]
zipNo=1
#zipFileDest=目的地+“/”+zipSrcNm+“/”+zipNo.\uu str\uuuu()+“.zip”
zipFileName=os.path.join(“”,zipNo.\uu str\uu()+“.zip”)
zipOut=zipfile.zipfile(zipFileName,'w')
对于xrange中的i(len(fileTuplesList)):
fileNameAndPath=fileTuplesList[i][0]
actualFile=FileTupleList[i][1]
writestr(文件名和路径,实际文件)
闭上

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

import zipfile
import os.path
zipFileNameSrc = 'ziptest.zip'
zipFile = open(zipFileNameSrc, 'rb')
unzippedFile = zipfile.ZipFile(zipFile)
imgList = [(s, unzippedFile.read(s)) for s in unzippedFile.namelist() if (".png" or ".PNG")]
for i in range(1,5):
    zipFileName = os.path.join('<some location>','ziptest_' + str(i) + '.zip')
    print('Creating ', zipFileName)
    zipOut = zipfile.ZipFile(zipFileName, 'w')
    for j in range(25):
        ind = (i-1)*25 + j
        fileNameAndPath = imgList[ind][0]
        actualFile = imgList[ind][1]
        zipOut.writestr(fileNameAndPath, actualFile)
    zipOut.close()
导入zipfile
导入操作系统路径
zipFileNameSrc='ziptest.zip'
zipFile=open(zipFileNameSrc,'rb')
解压文件=zipfile.zipfile(zipfile)
imgList=[(s,unzippedFile.read(s))表示unzippedFile.namelist()中的s,如果(“.png”或“.png”)]
对于范围(1,5)内的i:
zipFileName=os.path.join(“”,'ziptest_u'+str(i)+'.zip')
打印('Creating',zipFileName)
zipOut=zipfile.zipfile(zipFileName,'w')
对于范围(25)内的j:
ind=(i-1)*25+j
fileNameAndPath=imgList[ind][0]
实际文件=imgList[ind][1]
writestr(文件名和路径,实际文件)
闭上
您将zipOut.write()参数向后设置。第一个参数是您希望编写的文件,第二个参数是您希望为该文件指定的名称(您也可以将其保留为空,它只会自己使用文件名)


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

应该提到我已经尝试过了,并且得到了-TypeError:必须是不带空字节的编码字符串,而不是stry您的路径格式错误。看这里:你必须逃离这个世界。或者不要把它放在文件夹里,只给它文件名。