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
- 目的地/1.zip
- 目的地/2.zip
- 目的地/3.zip
- 目的地/4.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)
错误
我是在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您的路径格式错误。看这里:你必须逃离这个世界。或者不要把它放在文件夹里,只给它文件名。