首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用python将文件夹添加到zip文件

使用python将文件夹添加到zip文件
EN

Stack Overflow用户
提问于 2009-01-20 01:33:18
回答 13查看 91.7K关注 0票数 54

我想创建一个zip文件。向zip文件中添加一个文件夹,然后向该文件夹中添加一堆文件。

所以我想最终得到一个zip文件,里面有一个文件夹,里面有文件。

我不知道在zip文件中放置文件夹是不是不好的做法,但google在这个问题上什么也没给我。

我开始的时候是这样的:

def addFolderToZip(myZipFile,folder):
    folder = folder.encode('ascii') #convert path to ascii for ZipFile Method
    for file in glob.glob(folder+"/*"):
            if os.path.isfile(file):
                print file
                myZipFile.write(file, os.path.basename(file), zipfile.ZIP_DEFLATED)
            elif os.path.isdir(file):
                addFolderToZip(myZipFile,file)

def createZipFile(filename,files,folders):
    curTime=strftime("__%Y_%m_%d", time.localtime())
    filename=filename+curTime;
    print filename
    zipFilename=utils.getFileName("files", filename+".zip")
    myZipFile = zipfile.ZipFile( zipFilename, "w" ) # Open the zip file for writing 
    for file in files:
        file = file.encode('ascii') #convert path to ascii for ZipFile Method
        if os.path.isfile(file):
            (filepath, filename) = os.path.split(file)
            myZipFile.write( file, filename, zipfile.ZIP_DEFLATED )

    for folder in  folders:   
        addFolderToZip(myZipFile,folder)  
    myZipFile.close()
    return (1,zipFilename)


(success,filename)=createZipFile(planName,files,folders);

摘自:http://mail.python.org/pipermail/python-list/2006-August/396166.html

它会删除所有文件夹,并将目标文件夹(及其子文件夹)中的所有文件放入一个zip文件中。我无法让它添加整个文件夹。

如果我将路径提供给myZipFile.write中的文件夹,我会得到

IOError:错误13权限被拒绝:'..\packed\bin‘

任何帮助都是受欢迎的。

相关问题:How do I zip the contents of a folder using python (version 2.5)?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2009-01-19 22:21:47

好的,在我理解了你想要什么之后,它就像使用zipfile.write的第二个参数一样简单,你可以使用你想要的任何东西:

import zipfile
myZipFile = zipfile.ZipFile("zip.zip", "w" )
myZipFile.write("test.py", "dir\\test.py", zipfile.ZIP_DEFLATED )

创建一个压缩文件,其中的test.py将被解压缩到名为dir的目录中

编辑:我曾经不得不在zip文件中创建一个空目录:这是可能的。在上面的代码从压缩文件中删除文件test.py之后,该文件就消失了,但空目录保留了下来。

票数 53
EN

Stack Overflow用户

发布于 2011-06-29 03:05:20

您还可以使用shutil

import shutil

zip_name = 'path\to\zip_file'
directory_name = 'path\to\directory'

# Create 'path\to\zip_file.zip'
shutil.make_archive(zip_name, 'zip', directory_name)

这将把整个文件夹放入压缩包中。

票数 66
EN

Stack Overflow用户

发布于 2009-01-19 21:34:13

zip文件没有目录结构,它只有一堆路径名和它们的内容。这些路径名应该相对于一个假想的根文件夹( ZIP文件本身)。"../“前缀在zip文件中没有定义的含义。

假设您有一个名为a的文件,并且希望将其存储在zip文件内的“文件夹”中。在zipfile中存储文件时,您所要做的就是在文件名前加上一个文件夹名:

zipi= zipfile.ZipInfo()
zipi.filename= "folder/a" # this is what you want
zipi.date_time= time.localtime(os.path.getmtime("a"))[:6]
zipi.compress_type= zipfile.ZIP_DEFLATED
filedata= open("a", "rb").read()

zipfile1.writestr(zipi, filedata) # zipfile1 is a zipfile.ZipFile instance

我不知道有任何ZIP实现允许在ZIP文件中包含空文件夹。我可以想到一个变通方法(在zip“文件夹”中存储一个虚拟文件名,在提取时应该忽略它),但不能跨实现移植。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/458436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档