Самый простой способ - использовать shutil.make_archive . Он поддерживает как форматы zip, так и tar.
import shutil
shutil.make_archive(output_filename, 'zip', dir_name)
Если вам нужно сделать что-то более сложное, чем застегнуть весь каталог (например, пропустить определенные файлы), вам нужно будет вставить в модуль zipfile как предлагали другие.
Да, это действительно будет O (n). В худшем случае все ваши if прекратят работу, и будет выполнен последний оператор каждого блока if. Итак, каждая итерация выполняет 6 операторов. Тем не менее, ваша временная сложность будет O (6n), который по-прежнему O (n).
Да, наихудшая, а также наилучшая и средняя временная сложность этой функции составляет O (n) , поскольку она повторяется ровно столько же раз, сколько и размер входных данных. список, независимо от того, какие условия выполняются, без дополнительных вложений внутри.