Python — поддерживать структуру папок при архивировании
У меня есть очень специфический вариант использования, когда у меня есть несколько папок в одном каталоге, каждая из которых является подпапкой и файлом, и так далее, и тому подобное. Мне нужно иметь возможность заархивировать все эти папки верхнего уровня в один и тот же архив, сохраняя при этом ВСЕ структуру папок/путей .
Например, если исходная структура папок была такой:
/topLevel
- /directory1
- /directory1_subfolder
- /subfolderOfSubfolder
-/file.txt
- /file.txt
- /directory1file.txt
- /directory2
- /directory2_subfolder
- /file.txt
- /directory2file.txt
Я бы хотел, чтобы это выглядело ТОЧНО так в zip-архиве.
Я использовал этот код, который я изменил из другого сообщения StackOverflow, но, похоже, он не работает для моего варианта использования:
archive = ZipFile('archive_name.zip', 'w')
try:
for folderName, subfolders, filenames in os.walk(PATH + "/assets"):
for filename in filenames:
#create complete filepath of file in directory
filePath = os.path.join(folderName, filename)
print(YELLOW + "BUILD: " + GREEN + filePath + RESET)
# Add file to zip
archive.write(filePath, basename(filePath))
for folderName, subfolders, filenames in os.walk(PATH + "/data"):
for filename in filenames:
#create complete filepath of file in directory
filePath = os.path.join(folderName, filename)
print(YELLOW + "BUILD: " + GREEN + filePath + RESET)
# Add file to zip
archive.write(filePath, basename(filePath))
for folderName, subfolders, filenames in os.walk(PATH + "/modules"):
for filename in filenames:
#create complete filepath of file in directory
filePath = os.path.join(folderName, filename)
print(YELLOW + "BUILD: " + GREEN + filePath + RESET)
# Add file to zip
archive.write(filePath, basename(filePath))
for folderName, subfolders, filenames in os.walk(PATH + "/scripts"):
for filename in filenames:
#create complete filepath of file in directory
filePath = os.path.join(folderName, filename)
print(YELLOW + "BUILD: " + GREEN + filePath + RESET)
# Add file to zip
archive.write(filePath, basename(filePath))
for folderName, subfolders, filenames in os.walk(PATH + "/settings"):
for filename in filenames:
#create complete filepath of file in directory
filePath = os.path.join(folderName, filename)
print(YELLOW + "BUILD: " + GREEN + filePath + RESET)
# Add file to zip
archive.write(filePath, basename(filePath))
except Exception as err:
print(YELLOW + "BUILD:" + RED + " <ERROR> " + SPECIALDRIVE + str(err) + RESET)
Он просто смешивает все файлы вместе, как это
Вывод на печать выглядит правильно, по большей части.
Есть ли у кого-нибудь предложения о том, как я могу заставить Python поддерживать структуру моей папки? Заранее спасибо!