我必须使用 Python 2.6!这是我真正想要自动化的任务,情况是静态的,一旦我创建了这个,我就会很成功(好)。我必须创建一个独立的脚本(我希望是空闲的),它将:
- 将单个原始 zipfile (in_Zip) 解压缩到 zipfile 当前所在文件夹的内容。
- 转到步骤 1 产生的唯一(非压缩)文件夹(实际上是学生用户名“aforker”、“allisw99”、“btaylor7”等)。(这些唯一的学生文件夹中可能有 1 到 40 个)
- 在每个唯一文件夹('aforker'、'allisw99'、'btaylor7' 等)中提取任何和所有(可以是无,可以是 3 或 4 个).zip 文件到它们相对的上述唯一文件夹('aforker', 'allisw99'、'btaylor7' 等),而 'navigating' 即不会挂断可能存在或不存在于唯一文件夹中的可能的 .pdf 或 docx 文件('aforker'、'allisw99'、'btaylor7'、 ETC)
到目前为止,这是我所拥有的:(并且它“有效”)(稍后我将进行修改,这样我就不需要对原始 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
它有效,我在 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/']
'>>> '
但是,我不知道如何“进入”每个唯一文件夹:aforker、allisw99 等,然后提取“aforker”、“allisw99”等中的所有 zip。
我在其他论坛/列表服务上提出了一些建议,但它们都涉及破坏我当前的代码并在 Windows 命令窗口中执行操作等。a)我无法让它们工作,并且 b)它没有真的对我有帮助,因为我需要一个独立的 .py 文件来完成这一切。
为什么?你问?我将使用它来创建一个需要一个脚本的 ArcGIS“工具”(至少让我理解它):-)
提前感谢您提供的任何和所有建议、提示等。
作为记录,我确实尝试了以下@上面代码的底部:
for item in zipContents:
itemLoc = os.path.join(outDir,item)
y = zipfile.ZipFile(itemLoc,'a')
y.extractall(os.path.aplit(itemLoc)[0])
y.close
但我收到以下错误:
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/'
提前感谢您的任何和所有输入!
格雷格