0

我试图制作一个在整个计算机中搜索某些文件的脚本,类似于在 Windows 中搜索。我想在没有任何库的情况下做到这一点。

我开始将 dir 设置为磁盘的开始,然后检查我有多少 dirs - 我想创建一个函数来搜索当前目录中的新目录,所以最后我有磁盘中所有目录的列表。但是当我尝试找到所有以“.txt”结尾的文件时,我收到错误消息 WindowsError5 Acces Denied。我究竟做错了什么?谢谢

import os

os.chdir("\\.")
dir = os.listdir()

dirs = []

for x in dir:
    if os.path.isdir(x):
        dirs.append(x)

for y in dirs:
    o = os.listdir(y)
    for p in o:
        if p.endswith(".txt"):
            print(p)
input()
4

2 回答 2

2

首先,如果您想遍历目录树,请使用os.walk而不是尝试自己构建它。如果你想了解像 os.walk 这样的东西是如何工作的,源代码应该就在 os.py 中。

其次,除非您以管理员身份运行,否则您可能无法访问整个文件系统,因此当您尝试逐步浏览您无权访问的目录时,您将收到一堆拒绝访问错误。您必须使用 try/catch 以您认为合适的任何方式处理这些错误(例如,打印错误并转到下一个目录)

第三,这整个想法可能是错误的。Windows 桌面搜索实际上并不搜索您的整个树,它保留一个数据库并进行搜索,这要快得多(并且还允许用户搜索他们无法直接访问的路径 - 例如,您可能有权访问 /Users/ foo,但不能显示 /Users,这意味着 WDS 可以显示 /Users/foo 中的文件,但您的脚本不能)。

第四,使用 POSIX 的“查找”工具更容易做到这一点,或者……我忘记了名字,但是 Windows 附带的 DOS 派生工具可以做同样的事情,但不那么灵活。无论哪种方式,它都是一个单行 shell/batch 命令,而不是几十行 Python。

最后,按照您编写的方式,它将搜索当前驱动器,而不是所有驱动器,这可能不是您想要的,是吗?

于 2012-07-20T00:18:40.800 回答
1

您访问了一个您无权查看的目录。那又怎样。捕获异常并继续搜索。

于 2012-07-20T00:15:49.633 回答