Laxmikant
Laxmikant

Reputation: 2216

ZipFile creating zip with all the folders in zip

From the Python docs, I picked follwing snippet to zip a single file (For a flask project).

I have to create a zip file in temploc here: /home/workspace/project/temploc/zipfile.zip

And here is my file to be zipped: /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

This code creating a zip file in temploc but with full directory structure of zip file path.

  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)

But above code is creating a zip file with given path directory structure:

zipfile.zip    
├──home 
│   ├── workspace
│   │   └── project
│   │       └──temploc 
│   │           └── file_to_be_zipped.csv

BUt I want only this structure:

zipfile.zip    
   └── file_to_be_zipped.csv

I'm not getting what I'm missing.

Upvotes: 0

Views: 57

Answers (1)

Stanislav Ivanov
Stanislav Ivanov

Reputation: 1974

You shuld use second argument of ZipFile.write to set proper name of file in archive:

import os.path

...

myzip.write(file_to_zip, os.path.basename(file_to_zip))

Upvotes: 2

Related Questions