#python-3.x #zipfile
#python-3.x #zip
Вопрос:
Из документов Python я выбрал следующий фрагмент для архивирования одного файла (для проекта flask).
Я должен создать zip-файл в temploc здесь: /home/workspace/project/temploc/zipfile.zip
И вот мой файл, который нужно заархивировать: /home/workspace/project/temploc/file_to_be_zipped.csv
from zipfile import ZipFile
def zip_file(self, output, file_to_zip):
try:
with ZipFile(output, 'w') as myzip:
myzip.write(file_to_zip)
except:
return None
return output
Этот код создает zip-файл в temploc
, но с полной структурой каталогов пути к zip-файлу.
def prepare_zip(self):
cache_dir = app.config["CACHE_DIR"] #-- /home/workspace/project/temploc
zip_file_path = os.path.join(cache_dir, "zipfile.zip")
input_file = '/home/workspace/project/temploc/file_to_be_zipped.csv'
self.zip_file(zip_file_path, input_file)
Но приведенный выше код создает zip-файл с заданной структурой каталогов path:
zipfile.zip
├──home
│ ├── workspace
│ │ └── project
│ │ └──temploc
│ │ └── file_to_be_zipped.csv
Но я хочу только эту структуру:
zipfile.zip
└── file_to_be_zipped.csv
Я не понимаю, чего мне не хватает.
Ответ №1:
Вы должны использовать второй аргумент из ZipFile.write
, чтобы задать правильное имя файла в архиве:
import os.path
...
myzip.write(file_to_zip, os.path.basename(file_to_zip))
Комментарии:
1. Это сработало как по волшебству. Забыл принять ответ. Спасибо 🙂