Python - 压缩目录

时间:2015-04-17 13:10:41

标签: python python-2.7 zipfile

此代码当前在执行Python脚本的同一目标上创建一个zip文件,并尝试使用“Documents and Settings \ Owner”中的内容填充zip。但是,它一直试图复制ntuser.dat和NTUSER.dat,这给了我一个错误:[Errno 13] Permission denied: 'C:\\Documents and Settings\\Owner\\NTUSER.DAT'

如何跳过这两个文件以允许zip进程继续?我试图确定是否正在尝试复制ntuser文件,并且只是传递错误,但没有效果。

import os, zipfile, getpass

try:
    user= getpass.getuser()
    zf = zipfile.ZipFile(user + ".zip", "w", zipfile.ZIP_DEFLATED)
    directory = "C:\\Documents and Settings\Owner"
    for dirname, subdirs, files in os.walk(directory):
        zf.write(dirname)
        for filename in files:
            if "NTUSER" in filename:
                pass
            zf.write(os.path.join(dirname, filename))
except IOError as e:
    print e
    pass
zf.close()

1 个答案:

答案 0 :(得分:3)

当您找到匹配的文件时,您的代码不会

for filename in files:
    if "NTUSER" in filename:
        pass
    zf.write(os.path.join(dirname, filename))

pass无操作语句。 Python将继续下一行,将文件写入ZIP。

如果您想跳过这些文件,请改用continue

for filename in files:
    if "NTUSER" in filename:
        continue
    zf.write(os.path.join(dirname, filename))

这告诉Python跳过循环体的其余部分而转到下一次迭代,从而跳过zf.write()调用。

pass语句仅在Python语法要求成为一行的地方有用。例如,如果您想忽略您要写的特定异常:

try:
    # code that can raise an exception
except SpecificException:
    pass

因为您必须在except块中编写某些内容; pass适合那种'某些东西'很好。