Создание zip архива без пути к папке в архиве

Пишу код, который должен запаковать все файлы из указанной папки в архив, но когда выполняю код, в архиве появляется папка в которой лежат файлы, а мне нужно чтобы сразу в архиве появились файлы из папки, как можно исправить?

temp_dir = os.path.join('temp_captcha_folder')

with zipfile.ZipFile('CapMonster.zip', 'w', zipfile.ZIP_DEFLATED, True) as myzip:
        source = os.listdir('temp_captcha_folder')
        for source_folder in source:
            for root,dirs,files in os.walk(source_folder):
                for file in files:
                    path = os.path.join(root, file)
                    myzip.write(path)
                    print(path) 

например: CapMonster.zip/temp_captcha_folder/settings.json - архив в моем коде

CapMonster.zip/settings.json - то что мне над

temp_captcha_folder/settings.json - путь к файлу


Ответы (1 шт):

Автор решения: Nymos

У тебя проблема в том, что ты используешь os.listdir для получения списка файлов в указанной папке, и затем ты пытаешься выполнить os.walk для каждого из этих файлов, что является ошибкой. Вместо этого ты должен использовать os.walk сразу для указанной папки. Вот исправленный код:

import os
import zipfile

temp_dir = 'temp_captcha_folder'

with zipfile.ZipFile('CapMonster.zip', 'w', zipfile.ZIP_DEFLATED, True) as myzip:
    for root, dirs, files in os.walk(temp_dir):
        for file in files:
            path = os.path.join(root, file)
            arcname = os.path.relpath(path, temp_dir)  # Используй относительный путь
            myzip.write(path, arcname=arcname)
            print(path)
→ Ссылка