我是 Python 新手,一直在使用这个网站作为参考……谢谢你所做的一切,我学到了很多东西。第一个问题:
我正在使用 Path.rglob() 运行基本的递归文件搜索。当它遇到一个无权访问的文件夹时,我遇到了错误。我在 Windows 上运行 Python 3.7 并连接到网络驱动器上的 Windows 共享。
这是我的代码:
scan_folder = pathlib.Path("//192.168.1.242/Media")
nfo_files = list(scan_folder.rglob("*.nfo"))
它运行良好,直到我遇到我无权访问的文件夹,然后出错:
Traceback (most recent call last):
File "D:/Working/media_tools/media_tools/movies_nfo_cataloger.py", line 337, in <module>
nfo_files = list(scan_folder.rglob("*.nfo"))
File "C:\Users\ulrick65\Anaconda3\lib\pathlib.py", line 1094, in rglob
for p in selector.select_from(self):
File "C:\Users\ulrick65\Anaconda3\lib\pathlib.py", line 544, in _select_from
for p in successor_select(starting_point, is_dir, exists, scandir):
File "C:\Users\ulrick65\Anaconda3\lib\pathlib.py", line 507, in _select_from
entries = list(scandir(parent_path))
OSError: [WinError 59] An unexpected network error occurred: '\\\\192.168.1.242\\Media\\#recycle'
Process finished with exit code 1
我搜索并发现似乎已修复的 Pathlib 的以下问题,但是在我的情况下错误是不同的,因为它指向“意外的网络错误”而不是权限。
https://bugs.python.org/issue24120
我确认这确实是一个权限错误,作为我登录的用户,我无权访问该回收文件夹。我编辑了该文件夹的权限并授予自己访问权限,之后代码运行良好。
我知道我可以使用 oswalk,因为它忽略了这些……但我认为给出了上面链接到的错误修复,path.glob 也应该如此,但它没有。此外,使用 path.rglob() 非常流畅,只需一行代码并且速度很快(并不是说 oswalk 不会那么快)。
任何帮助表示赞赏。