我想创建一个zip文件。将一个文件夹添加到zip文件中,然后将一堆文件添加到该文件夹中。
所以我希望最终得到的是一个包含文件夹及其中文件的zip文件。
我不知道在zip文件中放置文件夹是否存在不良实践,但谷歌没有给我任何相关信息。
我开始尝试以下代码:
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:[Errno 13] 权限被拒绝:'..\packed\bin'
非常感谢您的任何帮助。
desired_zipfile_name_no
已经具有.zip
扩展名,它也会将.zip
附加到其末尾。然后,它返回带有新扩展名的完整路径。(您可以使用除zip以外的其他格式,我期望它也会附加它们的扩展名。) - zekelpath
,arcname
)如果path
是一个文件夹,它只会创建空文件夹并忽略path
的内容。这有什么用?!?!为什么这是标准行为!?!? :| - ewerybody