我想创建一个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)?
发布于 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之后,该文件就消失了,但空目录保留了下来。
发布于 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)
这将把整个文件夹放入压缩包中。
发布于 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“文件夹”中存储一个虚拟文件名,在提取时应该忽略它),但不能跨实现移植。
https://stackoverflow.com/questions/458436
复制相似问题