Создание 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 шт):
У тебя проблема в том, что ты используешь 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)