1

I am trying to make the script for zipping the subfolders including inside files, and sub subfolders as well as it's own in python. below program is by entering the folder name but still, it won't work. Please, somebody, help with the script. Thank you so much in advance.

import zipfile
import os
import sys

def zipfolder(foldername, target_dir):            
    zipobj = zipfile.ZipFile(foldername + '.zip', 'w', zipfile.ZIP_DEFLATED)
    rootlen = len(target_dir) + 1
    for base, dirs, files in os.walk(target_dir):
        for file in files:
            fn = os.path.join(base, file)
            zipobj.write(fn, fn[rootlen:])

zipfolder('20220711_RX_2_nomaly', '20220711_RX_3_nomaly') #insert your variables here
sys.exit()

structure of the subfolders and inside the files.

 main folder(folder)
  20220711_RX_2_nomaly(folder)
    grey(folder)
      xxxxx.jpg (files)
    json (folder)
       xxxx.json(files)
  20220711_RX_3_nomaly(folder)
    grey(folder)
      xxxxx.jpg (files)
    json (folder)
       xxxx.json(files)      
  20220711_RX_4_nomaly(folder)
    grey(folder)
      xxxxx.jpg (files)
    json (folder)
       xxxx.json(files)

expected

20220711_RX_2_nomaly.zip
20220711_RX_3_nomaly.zip
20220711_RX_4_nomaly.zip

1 Answers1

0

To create a zip archive you can use the ZipFile class from the zipfile module.

import os
from zipfile import ZipFile, ZIP_DEFLATED

def zipfolders(*args):
    """
    Creates identically named zip archives of folders provided.
    example: zipfolders(path1, path2, path3)
    output -> path1.zip | path2.zip | path3.zip

    Parameters
    ----------
    args : tuple
        A sequence of string paths to folders that need to be archived.
    """
    for foldername in args:
        zipfolder(foldername, foldername)

def zipfolder(foldername, target_dir):
    """
    This function receives two paths as arguments and creates a zip archive.
    example: zipfolder("future_foldername", "current_source")
    output -> future_foldername.zip
    
    Parameters
    ----------
    foldername : str
        This is the name of the zip archive that will be created.
    target_dir : str
        This is the path to the source files/folders to archive
    """
    archive = ZipFile(foldername + '.zip', 'w', ZIP_DEFLATED)
    for root, _, files in os.walk(target_dir):
        for filename in files:
            fullpath = os.path.join(root, filename)
            archive.write(fullpath)
    print(f"Successfully created archive {foldername}.zip")

zipfolder('20220711_RX_2_nomaly', '20220711_RX_2_nomaly') #insert your variables here

# or 

zipfolders('20220711_RX_2_nomaly', '20220711_RX_3_nomaly', '20220711_RX_4_nomaly', ...)
marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
Alexander
  • 16,091
  • 5
  • 13
  • 29
  • Thank you so much. But there is an error. Traceback (most recent call last): File "", line 1, in NameError: name 'zipfolder' is not defined. –  Jul 13 '22 at 23:42
  • https://chat.stackoverflow.com/rooms/246424/newroom – Alexander Jul 14 '22 at 00:25