'''
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=