我得到了在代码片段底部注释掉的错误。 我在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'
答案 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。