I must use Python 2.6! This is a task that I really want to automate, the situation is static and once I create this, I'll be golden (good). I must create one, stand alone script (in Idle, I hope) that will:
- Unzip a single original zipfile (in_Zip) to the contents of the folder that the zipfile currently resides.
- Go to the unique (NON ZIPPED) folders (actually student usernames 'aforker', 'allisw99', 'btaylor7', etc) that result from step 1. (there may be anywhere from 1 to 40 of these unique student folders)
- within each unique folder ('aforker', 'allisw99', 'btaylor7', etc) extract any and all (could be none, could be 3 or 4) .zip files within, to their relative aforementioned unique folders ('aforker', 'allisw99', 'btaylor7', etc), while 'navigating' i.e. not getting hung up on possible .pdf or docx files that may or may not reside in the unique folders ('aforker', 'allisw99', 'btaylor7', etc)
This is what I've got so far: (and it 'works') (I'll modify later so that I do not need to hard-code the original zipfile (in_Zip))
import os, os.path, zipfile
inZip = r'D:\D_Drive_Documents\Student_Work_Sample_usecopy1\2012-09-18 Lab_2.zip'
outDir = r"D:\D_Drive_Documents\Student_Work_Sample_usecopy1"
z = zipfile.ZipFile(in_Zip,'a')
z.extractall(outDir)
zipContents = z.namelist()
print zipContents
z.close
It works, I get the following in the Python Shell:
'>>> ================================ RESTART ================================'
'>>>'
['Lab_2/aforker/', 'Lab_2/aforker/aforker_Lab2.zip', 'Lab_2/allisw99/', 'Lab_2/allisw99/allisw99_Lab2.zip', 'Lab_2/allisw99/allisw99_Lab2_Bonus.pdf', 'Lab_2/allisw992/', 'Lab_2/allisw992/allisw99_Lab2_Bonus.pdf', 'Lab_2/btaylor7/', 'Lab_2/btaylor7/2nd_btaylor7_Lab2.zip', 'Lab_2/btaylor7/btaylor7_Lab2.zip', 'Lab_2/']
'>>> '
But, what I can't figure out is how to get 'into' each unique folder: aforker, allisw99, etc. and then extract any and all zips within 'aforker', 'allisw99', etc.
I've had some suggestions on other forums/list serves, but they all involve trashing my current code and doing things in the windows command window, etc. a) I can't get them to work, and b) it doesn't really help me because I need ONE stand alone .py file to make this all work.
Why? you ask? I will be using this to create an ArcGIS 'tool' that requires one script (at least for me to comprehend it) :-)
Thank you in advance for any and all suggestions, tips etc.
For the record, I did try the following @ the bottom of the code above:
for item in zipContents:
itemLoc = os.path.join(outDir,item)
y = zipfile.ZipFile(itemLoc,'a')
y.extractall(os.path.aplit(itemLoc)[0])
y.close
but I get the following error:
Traceback (most recent call last):
File "D:\D_Drive_Documents\Scripts\Unzip_a_zip_of_zips\Scripts\unzip_a_zip.py", line 50, in <module>
y = zipfile.ZipFile(itemLoc,'a')
File "C:\Python26\ArcGIS10.0\lib\zipfile.py", line 687, in __init__
self.fp = open(file, modeDict[mode])
IOError: [Errno 13] Permission denied: 'D:\\D_Drive_Documents\\Student_Work_Sample_usecopy1\\Lab_2/aforker/'