【问题标题】:Python - Zipping a directoryPython - 压缩目录
【发布时间】:2015-04-17 13:10:40
【问题描述】:

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

如何跳过这两个文件以继续压缩过程?我试图确定是否试图复制 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()

【问题讨论】:

    标签: python python-2.7 zipfile


    【解决方案1】:

    当您找到匹配的文件时,您的代码不会执行任何操作

    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 非常适合这个“东西”。

    【讨论】:

    • 非常感谢!这就是所需要的!但是,现在操作似乎没有结束,并且 zip 文件不再打开。你知道为什么会发生这种情况吗?
    • 我现在尝试打开 zip 文件夹会导致 explorer.exe 没有响应。我没有给这个过程足够的时间来完成,还是有什么问题?
    猜你喜欢
    • 2018-12-10
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多