1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | ''' I want a function which returns: dict("file1.txt": list(<contents of file1>), "file2.txt": list(<contents of file2>), "file3.txt": list(<contents of file3>), "file4.txt": list(<contents of file4>)) 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') |
JycnICAgIAogICAgSSB3YW50IGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJuczoKICAgIGRpY3QoImZpbGUxLnR4dCI6IGxpc3QoPGNvbnRlbnRzIG9mIGZpbGUxPiksCiAgICAgICAgICJmaWxlMi50eHQiOiBsaXN0KDxjb250ZW50cyBvZiBmaWxlMj4pLAogICAgICAgICAiZmlsZTMudHh0IjogbGlzdCg8Y29udGVudHMgb2YgZmlsZTM+KSwKICAgICAgICAgImZpbGU0LnR4dCI6IGxpc3QoPGNvbnRlbnRzIG9mIGZpbGU0PikpCiAgICAKICAgIEZvciBpbnB1dDogCiAgICAgICAgZmlsZS56aXA6CiAgICAgICAgICAgIG91dGVyXAogICAgICAgICAgICBvdXRlclxpbm5lcjEuemlwOgogICAgICAgICAgICAgICAgICAgIGZpbGUxLnR4dAogICAgICAgICAgICAgICAgICAgIGZpbGUyLnR4dAogICAgICAgICAgICBvdXRlclxpbm5lcjIuemlwOgogICAgICAgICAgICAgICAgICAgIGZpbGUzLnR4dAogICAgICAgICAgICAgICAgICAgIGZpbGU0LnR4dAonJycKCgppbXBvcnQgb3MKaW1wb3J0IHNodXRpbAppbXBvcnQgdGVtcGZpbGUKZnJvbSB6aXBmaWxlIGltcG9ydCBaaXBGaWxlCgpkZWYgdW56aXBfcmVjdXJzaXZlbHkocGFyZW50X2FyY2hpdmUpOgogICAgcGFyZW50X2FyY2hpdmUgPSBaaXBGaWxlKHBhcmVudF9hcmNoaXZlKQogICAgcmVzdWx0ID0gW10KICAgIHRtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQogICAgdHJ5OgogICAgICAgIHBhcmVudF9hcmNoaXZlLmV4dHJhY3RhbGwocGF0aD10bXBkaXIpCiAgICAgICAgbmFtZWxpc3Q9cGFyZW50X2FyY2hpdmUubmFtZWxpc3QoKQogICAgICAgIHByaW50IG5hbWVsaXN0CiAgICAgICAgZm9yIGl0IGluIHhyYW5nZSgxLCBsZW4obmFtZWxpc3QpKToKICAgICAgICAgICAgc3ViX3ogPSBaaXBGaWxlKG9zLnBhdGguam9pbih0bXBkaXIsIG5hbWVsaXN0W2l0XSkpCiAgICAgICAgICAgIHJlc3VsdC5leHRlbmQoc3ViX3oubmFtZWxpc3QoKSkKICAgIGZpbmFsbHk6CiAgICAgICAgc2h1dGlsLnJtdHJlZSh0bXBkaXIpCiAgICByZXR1cm4gcmVzdWx0CgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgcHJpbnQgdW56aXBfcmVjdXJzaXZlbHkoJ2ZpbGUuemlwJyk=
WindowsError: [Error 32] The process cannot access the file because it is being used by another process


