【问题标题】:I can't delete a folder that I just extracted from a zip file in python我无法删除刚刚从 python 中的 zip 文件中提取的文件夹
【发布时间】:2023-09-19 06:58:01
【问题描述】:

所以这是我的问题。我有一个 python 脚本,它需要一个 zipfile 并提取其内容。然后基于一些约束,我将尝试删除刚刚提取其内容的文件夹。出于某种原因,当我尝试删除该文件夹时,我收到一个错误,WindowsError: [Error 5] Access is denied: 'Foldername'。简单的代码如下所示

wzip = zipfile.ZipFile('zipfile.zip')

wzip.extractall()

wzip.close()

os.remove('ExtractedFolder')

如果我在解释器中运行它,我会得到以下信息:

Traceback(最近一次调用最后一次): 文件“”,第 1 行,在 WindowsError:[错误 5] 访问被拒绝:'ExtractedFolder'

我在 Windows Vista 32 位上使用 Python 2.6,但我有点困惑为什么会发生这种情况。

【问题讨论】:

    标签: python windows windows-vista operating-system zipfile


    【解决方案1】:

    可能的原因有很多。

    1. 您需要使用os.rmdir 删除目录
    2. 您需要清空文件夹 首先 - 请记住,Windows 命令 rmdir 需要一个 /S 选项来 删除内容,Python 可能会使用它。
    3. 是解压 还使用档案的属性? 可以应用只读属性。
    4. 你在读什么吗 文件夹,在你删除之前?您可以 没有关闭它。
    5. Windows 可能会导致包含以下文件名的类似问题 不寻常的字符

    【讨论】:

    • 我相信你在 1. 和 2 上是对的。os.remove 是错误的命令,os.rmdir 也可以正常工作,只是文件夹不为空。
    【解决方案2】:

    我在 Windows 上看到了一个可能的问题,即您可能在此目录中打开了一个文件。确保明确关闭使用 file.close() 打开的所有文件(不过,您的示例代码看起来正确)。

    另外,看看shutils.rmtree 可能会很有用:它可以递归地删除目录并捕获错误。

    【讨论】:

    • 谢谢。由于文件夹不是空的,我应该使用 shutil.rmtree