Windows 上の Python 2.7.4 では、次のディレクトリ構造があるとします。
test/foo/a.bak
test/foo/b.bak
test/foo/bar/c.bak
test/d.bak
そして、次を使用して、「d.bak」がアーカイブのルートになるように既存のアーカイブに追加します。
import zipfile
import os.path
import fnmatch
def find_files(directory, pattern):
for root, dirs, files in os.walk(directory):
for basename in files:
if fnmatch.fnmatch(basename, pattern):
filename = os.path.join(root, basename)
yield filename
if __name__=='__main__':
z = zipfile.ZipFile("testarch.zip", "a", zipfile.ZIP_DEFLATED)
for filename in find_files('test', '*.*'):
print 'Found file:', filename
z.write(filename, os.path.basename(filename), zipfile.ZIP_DEFLATED)
z.close()
zip ファイルのディレクトリはフラットです。サブディレクトリが存在する場合にのみfoo/
ディレクトリを作成します(除外すると、ディレクトリは作成されません。含まれている場合は作成されますが、意味がある場合は作成されません)が、サブディレクトリまたはファイルは作成されません。test/foo/bar/c.bak
foo/
foo/bar/
foo/
a.bak
b.bak
c.bak
d.bak
何か不足していますか?