my scipt is working as in searching for zip files, unzip and do the things i want. But problem arise when i have nested zip files inside the zip file, so i thought maybe i copy the working if statement, make a few adjustments but i still cant get it to work.
print('Searching for ZipFiles') for file in os.listdir(working_directory): zfile = file if zfile.endswith('.zip'): # Create a ZipFile Object and load sample.zip in it with ZipFile(zfile, 'r') as zipObj: # Get a list of all archived file names from the zip listOfFileNames = zipObj.namelist() # Iterate over the file names for fileName in listOfFileNames: zipObj.extract(fileName, './temp') maincom() #until here, my script is working, below is the new IF statement if fileName.endswith('.zip'): for file in os.listdir('.'): zfile = file if zfile.endswith('.zip'): # Create a ZipFile Object and load sample.zip in it with ZipFile(zfile, 'r') as zipObj: # Get a list of all archived file names from the zip listOfFileNames = zipObj.namelist() # Iterate over the file names for fileName in listOfFileNames: zipObj.extract(fileName, '') maincom()
what i want to achieve is to simply unzip the nested zip files in the current directory they are found, run maincom(), if possible, maybe delete the nested zip file after unzip completion
Thanks guys
Advertisement
Answer
Try this:
import glob import zipfile while len(glob.glob(working_directory+"*zip")) != 0: for filename in glob.glob(working_directory+"*zip"): with ZipFile(filename, 'r') as zipObj: for fileName in zipObj.namelist(): zipObj.extract(fileName, './temp') maincom()
In principle, this will loop until there is no more zipfile in your working directory.
Which means: if zipfiles are present at iteration 1 and contain other zipfiles, those will be extracted. Which means: zipfiles will be present at iteration 2. And will be extracted. Etc Etc…