我收到此错误:
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
答案 0 :(得分:10)
在Windows上实现管理员execution
权限基本上有三种主要方法。
cmd.exe
python
可执行文件的权限(不推荐)cmd.exe
as和admin 由于在Windows中没有sudo
命令,因此您必须以管理员身份运行终端(cmd.exe
)才能达到相当于sudo
的权限级别。你可以这两种方式:
手动
cmd.exe
C:\Windows\system32
Run as Administrator
C:\Windows\system32
通过快捷键
alt
和ctrl
之间)+ X
。Command Prompt (Admin)
通过执行此操作,您将以管理员身份运行,因此此问题不应继续存在
python.exe
Properties
"C:\path_to\python.exe" C:\path_to\your_script.py"
python
可执行文件(不推荐)这是一种可能性,但我强烈反对你这样做。
它只涉及找到python
可执行文件并将其设置为每次都以管理员身份运行。可能并且可能会导致文件创建(它们只是管理员)或可能需要不是管理员运行的模块的问题。
答案 1 :(得分:7)
更改要保存的目录的权限,以便所有用户都具有读写权限。
答案 2 :(得分:5)
如果您尝试写入文件,但是您的路径是文件夹,也会发生这种情况。
这很容易出错。
要对此进行防御,请使用:
import os
path = r"my/path/to/file.txt"
assert os.path.isfile(path)
with open(path, "r") as f:
pass
如果您的路径实际上是一个文件夹,则断言将失败。
答案 3 :(得分:3)
在使用Pycharm的Windows机器上发生了这种情况。
修复:右键单击PyCharm应用程序并以管理员身份运行。
答案 4 :(得分:3)
您可以以管理员身份运行CMD,并使用cacls.exe更改目录的权限。例如:
cacls.exe c: /t /e /g everyone:F # means everyone can totally control the C: disc
答案 5 :(得分:1)
我有类似的问题。我认为可能与系统有关。但是,使用shutil.copytree()
模块中的shutil
为我解决了这个问题!
答案 6 :(得分:1)
问题可能出在您要打开的文件的路径中。尝试并打印路径,看看是否合适 我有类似的问题
def scrap(soup,filenm):
htm=(soup.prettify().replace("https://","")).replace("http://","")
if ".php" in filenm or ".aspx" in filenm or ".jsp" in filenm:
filenm=filenm.split("?")[0]
filenm=("{}.html").format(filenm)
print("Converted a file into html that was not compatible")
if ".aspx" in htm:
htm=htm.replace(".aspx",".aspx.html")
print("[process]...conversion fron aspx")
if ".jsp" in htm:
htm=htm.replace(".jsp",".jsp.html")
print("[process]..conversion from jsp")
if ".php" in htm:
htm=htm.replace(".php",".php.html")
print("[process]..conversion from php")
output=open("data/"+filenm,"w",encoding="utf-8")
output.write(htm)
output.close()
print("{} bits of data written".format(len(htm)))
但添加此代码后:
nofilenametxt=filenm.split('/')
nofilenametxt=nofilenametxt[len(nofilenametxt)-1]
if (len(nofilenametxt)==0):
filenm=("{}index.html").format(filenm)
效果很好
答案 7 :(得分:1)
这里的问题是您的用户没有适当的rights/permissions打开文件,这意味着您需要在运行该命令之前为python ide授予一些管理特权。
由于您是Windows用户,只需 右键单击python ide =>选择选项“以管理员身份运行” ,然后运行命令。
如果您使用命令行来运行代码,请执行相同的 具有管理员权限的命令提示符 。
答案 8 :(得分:0)
确保您要写入的文件首先关闭。
答案 9 :(得分:0)
PermissionError:[Errno 13]权限被拒绝:
在使用excel时遇到上述错误,我的excel已打开,然后关闭并尝试运行我的代码。它对我有用。
您的文件必须打开。关闭文件,然后再次运行代码,它应该可以工作。
答案 10 :(得分:0)
就我而言。我只是将.idlerc
目录隐藏了。
因此,我要做的就是访问该目录,然后使recent-files.lst
不再隐藏,问题就解决了
答案 11 :(得分:0)
仔细检查并确保您要写入的文件未打开,或者后台的某些程序未保留该文件/数据。这是我的问题。
答案 12 :(得分:0)
另一个帮助我的选择是使用pathlib:
from pathlib import Path
p = Path('.') ## if you want to write to current directory
with open(p / 'test.txt', 'w') as f:
f.write('test message')
它有效
答案 13 :(得分:0)
我遇到了类似的问题。我在Windows上使用Anaconda,并按以下方式解决了它: 1)从开始菜单中搜索“ Anaconda提示” 2)右键单击并选择“以管理员身份运行” 3)按照安装步骤进行操作...
这可以解决权限问题
答案 14 :(得分:0)
在我的情况下,问题是我隐藏了文件(文件已隐藏属性):
如何在python中处理问题:
import os
# This is how to hide the file
os.system(f"attrib +h {filePath}")
file_ = open(filePath, "wb")
>>> PermissionError <<<
# and this is how to show it again making the file writable again:
os.system(f"attrib -h {filePath}")
file_ = open(filePath, "wb")
# This works
# and just to let you know there is also this way
# so you don't need to import os
import subprocess
subprocess.check_call(["attrib", "-H", _path])
答案 15 :(得分:0)
就我而言,
我在Microsoft应用商店中安装了ubuntu。
我也在那里安装了python。
那是问题。因此发生了错误。
在我的ubuntu操作系统中删除了python之后,我解决了问题。
已添加_2 真正解决了问题。 问题是V3在pip文件上看到了。 因此,permissoin被拒绝了。
答案 16 :(得分:0)
使用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))
答案 17 :(得分: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
答案 18 :(得分:0)
正如@gulzar 所说,我在位于 'abc.txt'
的 python 脚本中写入文件 Z:\project\test.py
时遇到问题:
with open('abc.txt', 'w') as file:
file.write("TEST123")
实际上,每次我运行脚本时,它都想在我的 C 驱动器中创建一个文件而不是 Z! 所以我只指定了文件名的完整路径:
with open('Z:\\project\\abc.txt', 'w') as file: ...
效果很好。我无需在 Windows 中添加任何权限或更改任何内容。
答案 19 :(得分:0)
这是一个棘手的问题,因为错误消息会引诱您远离问题所在。
当您在权限错误的根源处看到导入模块的 "__init__.py"
时,您就有了命名冲突。我喝了一瓶朗姆酒,有 {{1} } 在文件的顶部。在 TKinter 内部,有一个变量、类或函数的名称,这些名称已经在脚本的其他任何地方使用。
其他症状是:
解决方案: 将导入行更改为“import tkinter”,并将命名空间添加到代码中的 tkinter 方法中。