''' I want a function which returns: dict("file1.txt": list(), "file2.txt": list(), "file3.txt": list(), "file4.txt": list()) For input: file.zip: outer\ outer\inner1.zip: file1.txt file2.txt outer\inner2.zip: file3.txt file4.txt ''' import os import shutil import tempfile from zipfile import ZipFile def unzip_recursively(parent_archive): parent_archive = ZipFile(parent_archive) result = [] tmpdir = tempfile.mkdtemp() try: parent_archive.extractall(path=tmpdir) namelist=parent_archive.namelist() print namelist for it in xrange(1, len(namelist)): sub_z = ZipFile(os.path.join(tmpdir, namelist[it])) result.extend(sub_z.namelist()) finally: shutil.rmtree(tmpdir) return result if __name__ == '__main__': print unzip_recursively('file.zip')