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 поддерживать структуру моей папки? Заранее спасибо!

0 ответов

Другие вопросы по тегам