Обратите внимание, что это не включает пустые каталоги. Если это необходимо, в Интернете есть обходные пути; вероятно, лучше всего получить запись ZipInfo для пустых каталогов в наших любимых программах архивирования, чтобы увидеть, что в них находится.
Жесткое кодирование файла/пути, чтобы избавиться от специфики моего кода...
target_dir = '/tmp/zip_me_up'
zip = zipfile.ZipFile('/tmp/example.zip', 'w', zipfile.ZIP_DEFLATED)
rootlen = len(target_dir) + 1
for base, dirs, files in os.walk(target_dir):
for file in files:
fn = os.path.join(base, file)
zip.write(fn, fn[rootlen:])
Вы можете попробовать использовать пакет distutils:
distutils.archive_util.make_zipfile(base_name, base_dir[, verbose=0, dry_run=0])