'''
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
'''
from zipfile import ZipFile, is_zipfile
def unarchive_all(input_zip):
a=[]
z = ZipFile(input_zip);
for member in z.namelist():
if is_zipfile(member):
sub_z = ZipFile(file=z.open(member))
for filename in sub_z.namelist():
a.append(filename) # just for testing
return a
if __name__ == "__main__":
print unarchive_all('file.zip')
JycnICAgIAogICAgSSB3YW50IGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJuczoKICAgIGRpY3QoImZpbGUxLnR4dCI6IGxpc3QoPGNvbnRlbnRzIG9mIGZpbGUxPiksCiAgICAgICAgICJmaWxlMi50eHQiOiBsaXN0KDxjb250ZW50cyBvZiBmaWxlMj4pLAogICAgICAgICAiZmlsZTMudHh0IjogbGlzdCg8Y29udGVudHMgb2YgZmlsZTM+KSwKICAgICAgICAgImZpbGU0LnR4dCI6IGxpc3QoPGNvbnRlbnRzIG9mIGZpbGU0PikpCiAgICAKICAgIEZvciBpbnB1dDogCiAgICAgICAgZmlsZS56aXA6CiAgICAgICAgICAgIG91dGVyXAogICAgICAgICAgICBvdXRlclxpbm5lcjEuemlwOgogICAgICAgICAgICAgICAgICAgIGZpbGUxLnR4dAogICAgICAgICAgICAgICAgICAgIGZpbGUyLnR4dAogICAgICAgICAgICBvdXRlclxpbm5lcjIuemlwOgogICAgICAgICAgICAgICAgICAgIGZpbGUzLnR4dAogICAgICAgICAgICAgICAgICAgIGZpbGU0LnR4dAonJycKCmZyb20gemlwZmlsZSBpbXBvcnQgWmlwRmlsZSwgaXNfemlwZmlsZQoKZGVmIHVuYXJjaGl2ZV9hbGwoaW5wdXRfemlwKToKICAgIGE9W10KICAgIHogPSBaaXBGaWxlKGlucHV0X3ppcCk7CiAgICBmb3IgbWVtYmVyIGluIHoubmFtZWxpc3QoKToKICAgICAgICBpZiBpc196aXBmaWxlKG1lbWJlcik6CiAgICAgICAgICAgIHN1Yl96ID0gWmlwRmlsZShmaWxlPXoub3BlbihtZW1iZXIpKQogICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc3ViX3oubmFtZWxpc3QoKToKICAgICAgICAgICAgICAgIGEuYXBwZW5kKGZpbGVuYW1lKSAjIGp1c3QgZm9yIHRlc3RpbmcKICAgIHJldHVybiBhCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgcHJpbnQgdW5hcmNoaXZlX2FsbCgnZmlsZS56aXAnKQ==