权限错误:[Errno 13] 权限被拒绝

107

我遇到了这个错误:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python34\lib\tkinter\__init__.py", line 1538, in __call__
return self.func(*args)
File "C:/Users/Marc/Documents/Programmation/Python/Llamachat/Llamachat/Llamachat.py", line 32, in download
with open(place_to_save, 'wb') as file:
PermissionError: [Errno 13] Permission denied: '/goodbye.txt'

运行此命令时:

def download():
    # get selected line index
    index = films_list.curselection()[0]
    # get the line's text
    selected_text = films_list.get(index)
    directory = filedialog.askdirectory(parent=root, 
                                        title="Choose where to save your movie")
    place_to_save = directory + '/' + selected_text
    print(directory, selected_text, place_to_save)
    with open(place_to_save, 'wb') as file:
        connect.retrbinary('RETR ' + selected_text, file.write)
    tk.messagebox.showwarning('File downloaded', 
                              'Your movie has been successfully downloaded!' 
                              '\nAnd saved where you asked us to save it!!')

有人能告诉我我做错了什么吗?

规格: Python 3.4.4 x86 Windows 10 x64


4
place_to_save 应该只是 goodbye.txt 吗?我不确定 Windows 会如何表现,但在 Linux 上,您将写入根目录(/),这总是一个坏主意。您应该使用 os.path.join(directory, selected_text) 而不是手动字符串操作。 - Łukasz Rogalski
尝试使用open(place_to_save, 'w+')代替open(place_to_save, 'wb')。我记得看到一些其他的SO帖子也涉及到了同样的问题。 - DevLounge
4
一个 MCVE(最小化完整可复现示例)应该只有一行:open('/goodbye.txt', 'wb')。如果这也会引发错误,那么 tkinter 标签是无关紧要的,应该将其移除。该问题应该标记操作系统标签,因为这与问题相关。 - Terry Jan Reedy
2
print(directory, selected_text, place_to_save) 的输出是什么?我猜 directory 由于某些原因是一个空字符串。我建议在 filedialog.askdirectory 调用中添加 initialdir=r'c:/' - J.J. Hakala
1
@Mixone 我认为这是因为代码不够简洁。唯一相关的一行是 with open(place_to_save, 'wb') as file:,也许还有路径本身。此外,堆栈跟踪不完整。 - Gulzar
显示剩余6条评论
19个回答

1

出现这种情况的最常见原因可能是该特定用户对文件夹/文件的权限不足。

在想要写入文件的目录中授予写入权限。您可以通过使用 chmodchown 命令更改目录的所有权或权限来实现此目的。

示例:

# Change ownership of the directory to the current user
sudo chown -R $USER:$USER /path/to/directory

# Grant write permissions to the directory
sudo chmod -R 777 /path/to/directory


1
非常感谢您的见解。在过去的两天里,我尝试了很多不同的方法来解决我的问题。现在问题已经解决了。其他人请注意:请将$USER:$USER更改为$ROOT:$ROOT或您操作系统的“用户名”。 - Mehedi Hasan Faysal

0
在我的情况下,我已经打开并且未保存这个文件(通过Python代码进行读取或访问)。
PermissionError: [Errno 13] Permission denied: 'path_to_the_open_file'

我必须保存并关闭文件才能读取/访问,特别是使用pandas读取(pd.read_excel,pd.read_csv等)或命令with open():


0
我在Windows环境和Python 3.11.4中遇到了相同的错误。 在我的情况下,问题是文件的绝对路径太长了。

0
我遇到了类似的问题。我在Windows上使用Anaconda,并按照以下步骤解决了它: 1)从开始菜单中搜索“Anaconda提示符” 2)右键单击并选择“以管理员身份运行” 3)然后按照安装步骤进行操作...
这样就解决了权限问题。

0

这是一个棘手的问题,因为错误消息会让您远离问题所在。

当您在权限错误的根目录看到导入模块的"__init__.py"时,意味着您有一个命名冲突。我敢打赌,文件顶部有"from tkinter import *"。在TKinter中,变量、类或函数的名称已在脚本的任何其他位置使用。

其他症状可能包括:

  1. 在运行脚本后立即出现错误。
  2. 该脚本可能在以前的Python版本中运作良好。
  3. 用户Mixon关于管理员执行权限的长篇叙述根本没有影响。从控制台或其他软件访问代码中提到的文件时不会出现访问错误。

解决方案: 将导入行更改为"import tkinter"并在代码中添加tkinter方法的命名空间。


0

以下是我遇到错误的步骤:

import os

path = input("Input file path: ")

name, ext = os.path.basename(path).rsplit('.', 1)
dire = os.path.dirname(path)

with open(f"{dire}\\{name} temp.{ext}", 'wb') as file:
    pass

如果用户输入的文件路径有多个元素,比如

C:\\Users\\Name\\Desktop\\Folder

但我认为它可以处理像这样的输入

file.txt

只要file.txt与Python文件在同一个目录下就可以了。但是不行,它给了我那个错误,然后我意识到正确的输入应该是:
.\\file.txt

或者你可以使用 path = os.path.abspath(path) - Gulzar
此外,你可以(而且应该)使用 os.path.sep 代替所有的“\”,或者更好的方法是使用 os.path.join - Gulzar

0
如@gulzar所说,我的Python脚本位于Z:\project\test.py中,我遇到了写入文件'abc.txt'的问题:
with open('abc.txt', 'w') as file:
    file.write("TEST123")

每次我运行脚本时,实际上它想要在我的C驱动器中创建一个文件,而不是Z驱动器!因此,我只在全路径中指定了文件名。
with open('Z:\\project\\abc.txt', 'w') as file: ...

它运行得很好。我不需要添加任何权限,也没有在Windows中更改任何内容。


-1

遵循两个简单的步骤:

  1. 如果你的脚本中打开了正在使用的文档,请关闭它。
  2. 从Windows菜单中以“管理员身份运行”Spyder。

错误已解决。


-2

实际上,使用keras.preprocessing.image时也会出现这个错误,例如:

img = keras.preprocessing.image.load_img(folder_path, target_size=image_size)

会抛出权限错误。然而,如果您首先导入库:from keras.preprocessing import image,然后再使用它,问题就会奇妙地解决。像这样:

img = image.load_img(img_path, target_size=(180,180))

我本来想把你的命名统一起来,但是注意到你在folder_path上出现了错误,而在img_path上没有出现错误。这让我相信Keras没有问题,你问题的真正解决方案是https://dev59.com/e1oV5IYBdhLWcg3wTdMc#62244490。 - Gulzar
错误不仅限于Keras。 - Glitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接