, если вы хотите сжать список файлов и не хотите, чтобы архив содержал абсолютные пути к каждому файлу ...
def zipFiles(directory):
parentDir = "C:\Users\hhafez\Desktop" #hardcoding parent path to strip
with ZipFile('my_python_files.zip','w') as myzip:
for root, directories, files in os.walk(directory):
zipFileName = root[len(parentDir):] #always take whats after the parentDir for the filename going in the zip
for file in files:
myzip.write(os.path.join(root,file), os.path.join(zipFileName,file), compress_type=zipfile.ZIP_DEFLATED)
zipfiles(r"C:\Users\hhafez\Desktop\Test")
Это должно выполнить то, что вам нужно. Основным отличием здесь является переменная zipFileName.
zipFileName = root[len(parentDir):]
Эта строка удаляет parentDir из каталога, через который вы сканируете. zipFileName и имя файла будут именем архива для передачи в myzip.write, что объясняет это:
myzip.write(os.path.join(root,file), os.path.join(zipFileName,file), compress_type=zipfile.ZIP_DEFLATED)