<p>我写了一个更完整的版本,它能够过滤文件夹和ext</p>
<p>我们不能简单地在压缩之前删除.svn这样的文件夹。下面的代码可以帮助您。在</p>
<p>它将一个文件夹压缩成一个zip文件,保持它的结构并过滤某些文件夹和ext,就像你所期望的那样。在</p>
<pre><code>def IsPathValid(path, ignoreDir, ignoreExt):
splited = None
if os.path.isfile(path):
if ignoreExt:
_, ext = os.path.splitext(path)
if ext in ignoreExt:
return False
splited = os.path.dirname(path).split('\\/')
else:
if not ignoreDir:
return True
splited = path.split('\\/')
for s in splited:
if s in ignoreDir: # You can also use set.intersection or [x for],
return False
return True
def zipDirHelper(path, rootDir, zf, ignoreDir = [], ignoreExt = []):
# zf is zipfile handle
if os.path.isfile(path):
if IsPathValid(path, ignoreDir, ignoreExt):
relative = os.path.relpath(path, rootDir)
zf.write(path, relative)
return
ls = os.listdir(path)
for subFileOrDir in ls:
if not IsPathValid(subFileOrDir, ignoreDir, ignoreExt):
continue
joinedPath = os.path.join(path, subFileOrDir)
zipDirHelper(joinedPath, rootDir, zf, ignoreDir, ignoreExt)
def ZipDir(path, zf, ignoreDir = [], ignoreExt = []):
rootDir = path if os.path.isdir(path) else os.path.dirname(path)
zipDirHelper(path, rootDir, zf, ignoreDir, ignoreExt)
pass
</code></pre>
<p>这样使用:</p>
^{pr2}$