Python 3.6.1 - PermissionError: [Errno 13] 尝试解压缩文件时显示权限被拒绝

问题描述 投票:0回答:4

我在尝试提取 zip 文件时遇到 PermissionError。我已经在这里进行了很多讨论,但仍然无法解决我的问题。

目前我正在 Windows 8 机器上使用 Python 3.6.1。我通过以下代码创建了一个新目录:

import os,zipfile

newpath = 'C:\\home\\vivvin\\shKLSE'
#newpath = r'C:\\home\\vivvin\\shKLSE'
if not os.path.exists(newpath):
os.makedirs(newpath)

接下来我下载了一个 zip 文件并保存到

newpath
目录中。

现在我尝试将 zip 文件中的所有文件(10 个 csv 文件)提取到

newpath
目录中。为了实现这一点,我编写了以下代码:

import os,zipfile

newpath = 'C:\\home\\vivvin\\shKLSE'
path_to_zip_file = newpath
directory_to_extract_to = newpath
#zip_ref = zipfile.ZipFile(newpath, 'r')
zip_ref = zipfile.ZipFile(newpath, 'w')
zip_ref.extractall(newpath)
zip_ref.close()

但是每次我都会收到错误:

Traceback (most recent call last):
File "C:/Users/AtechM_03/PycharmProjects/Webinar/SeleniumScripts/extract.py", line 6, in <module>
zip_ref = zipfile.ZipFile(newpath, 'w')
File "C:\Python\lib\zipfile.py", line 1082, in __init__
self.fp = io.open(file, filemode)
PermissionError: [Errno 13] Permission denied: 'C:\\home\\vivvin\\shKLSE'

我手动观察了 zip 文件的属性,似乎有一条安全消息和一个

Unblock
按钮。截至目前,我不知道如何
Unblock
它。

有人可以帮我吗?预先感谢。

python python-3.x file io
4个回答
3
投票

我在尝试写入文件时遇到了类似的问题。

对我有用的修复:

右键单击您的 PyCharm 应用程序并以管理员身份运行它。


3
投票

我在解压缩文件夹“temp.zip”时遇到了同样的错误,并且只提取了文件。 就我而言,我有一个目录,其中包含文件夹“temp”和一个名为“temp.zip”的 zip 文件。

def unzip(path, filename): 
    with ZipFile(path, 'r') as zipobj: 
        zipobj.extract(member=filename)

当我运行此文件时,我收到错误消息:

    ...
   "test.py", line 259, in unzip
        with ZipFile(path, 'r') as zipobj: 
      File "C:\Program Files\Python36\lib\zipfile.py", line 1090, in __init__
        self.fp = io.open(file, filemode)
    PermissionError: [Errno 13] Permission denied

问题是,

zipobj.extract()
需要创建一个名为 temp 的文件夹并(临时)提取内容。但这个文件夹已经存在了。 --> 我收到了权限被拒绝的错误。

解决方案

  • 删除文件夹“temp”
  • 或者先将 zip 移动到另一个目录并在那里解压缩

2
投票

我猜是因为你的字典在C盘(windows盘,有时禁止写入和擦除),如果你换到D盘也许可以用。


0
投票

您收到此错误的原因是因为 zipfile.ZipFile() 期望您做 3 个主要事情: 首先是路径(如果要指定一个),然后是文件名和模式“r/w”。

所以再次查看您的代码 “newpath”是一个目录,这意味着您仍然需要为它们提供文件名。这里期待您想要存档,因为您使用的是“w”书写模式。

然后你要求 zipfile.extractall(),这意味着你需要 'r' 模式,同时你需要指向你想要解压的文件夹。

您的代码中有很多重复,相信您在排序时会意识到。

© www.soinside.com 2019 - 2024. All rights reserved.