PermissionError:运行脚本时出现[WinError 5]

时间:2020-06-08 12:33:12

标签: python python-3.x file-io

我得到了在代码片段底部注释掉的错误。 我在IDLE中运行所有这些。我在Windows上,并尝试以管理员身份在IDLE上右键单击运行,认为可能有帮助,但无法正常工作。我以前运行过这样的代码来完成相同的任务,但是在不同的文件夹上。我也知道还有其他更简单的方法来移动文件,但是由于我正在按照书中的练习进行操作,因此我想实现最终目标,即以尽可能接近的方式将多个文件移动到不同的目录中如下所述。具体来说,我正在寻找导致此错误的原因的输入,并了解原因。

我看过this个视频,从ff到[7:40]。上下文稍有不同,但错误消息是相同的。即使这样,我也看不到解释与我正在做什么的关系,特别是在我的python上下文中。任何帮助将非常感激!

import pathlib
import shutil

home = pathlib.Path.home()
pictures = home / "Pictures"
imgfiles = pictures / "imgfiles"
file1 = pictures / "image1.png"
file2 = pictures / "image2.gif"
file3 = pictures / "Uplay" / "image3.png"
file4 = pictures / "camera roll" / "image4.jpg"
filelist = [file1, file2, file3, file4]
sourcefiles = []
destination = imgfiles

for file in filelist:
    file.touch()

for file in pictures.rglob("image?.???"):
    sourcefiles.append(file)

for path in sourcefiles:
    path.replace(destination)

回溯如下:

Obtain the following Error when running the last line of code: PermissionError: [WinError 5]
Traceback (most recent call last):
 File "<pyshell#42>", line 2, in <module>
   path.replace(destination)
 File "C:\Users\XXXX\AppData\Local\Programs\Python\Python38\lib\pathlib.py", line 1366, in replace
   self._accessor.replace(self, target)
PermissionError: [WinError 5] Acesso negado: 'C:\\Users\\XXXX\\Pictures\\image1.png' -> 'C:\\Users\\XXXX\\Pictures\\imgfiles'

2 个答案:

答案 0 :(得分:0)

您试图将文件写入目录,而Windows不喜欢这样。如果您用目标文件名替换目标,则可以正常工作。

因此,如果我要重新编写您的代码,则可以按以下方式进行操作:-

import pathlib
import shutil

home = pathlib.Path.home()
pictures = home / "Pictures"
imgfiles = pictures / "imgfiles"
file1 = pictures / "image1.png"
file2 = pictures / "image2.gif"
file3 = pictures / "Uplay" / "image3.png"
file4 = pictures / "camera roll" / "image4.jpg"
filelist = [file1, file2, file3, file4]
sourcefiles = []
destination = imgfiles

for file in filelist:
    file.touch()

for file in pictures.rglob("image?.???"):
    destination=imgfiles/ str(file)[str(file).rfind("\\")+1:]  #Added
    file.replace(destination)

#Commented
#for path in sourcefiles: 
#    path.replace(destination) 

希望有帮助。

答案 1 :(得分:0)

替换:

for path in sourcefiles:
    path.replace(destination)

具有:

for path in sourcefiles:
    path.replace(destination / path.name)

从RealPython致敬Bart。