ZipFile создает zip со всеми папками в zip

#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. Это сработало как по волшебству. Забыл принять ответ. Спасибо 🙂