【问题标题】:os.walk missing out certain subdirectoriesos.walk 遗漏了某些子目录
【发布时间】:2015-07-11 10:41:26
【问题描述】:
for dirname, dirnames, filenames in os.walk("C:\\",followlinks=True,topdown=True):

    for subdirname in dirnames:    
        os.chdir(os.path.join(subdirname, dirname))

        if os.getcwd()!="C:\Windows\winsxs":
            print(os.getcwd())

如您所见,此代码应该搜索整个 C 驱动器的所有子目录并更改 Python 的工作目录并显示结果。无论出于何种原因,我都忍不住注意到,os.walk 已经丢失了很多子目录。它似乎找到了一个大目录树,然后在继续之前只扫描了大约一半(或者至少我检查过的目录是这种情况,例如桌面)

我已经搜索了网络,但我似乎找不到其他遇到此问题的人,非常感谢一些帮助(我是新手编码员)。

编辑:解决方案有效,但现在运行代码时出现权限错误。

【问题讨论】:

  • join 调用中dirname 不是必须在subdirname 之前吗?

标签: python operating-system os.walk


【解决方案1】:

您的加入有误。必须是:

os.chdir(os.path.join(dirname, subdirname))

这就是为什么您永远不会进入最高目录级别的原因。

【讨论】:

    【解决方案2】:

    如文档(此处:https://docs.python.org/2/library/os.html#os.walk)所述,要获取 dirpath 中文件或目录的完整路径,请执行 os.path.join(dirpath, name)。

    您的加入应该是:

    os.chdir(os.path.join(dirname, subdirname))
    

    致您的编辑:如果您想搜索所有目录,您可能会发现一些您无权以普通用户身份进入或阅读的目录。如果您想这样做,您可能必须使用您的管理员帐户。

    【讨论】:

    • 这很奇怪,因为我是管理员。
    • 我没有使用Windows,但是我发现this:即使你的用户是Administrators组的成员,程序也不能使用Administrator权限。当您选择“以管理员身份运行”并且您的用户是管理员时,程序将使用原始的无限制访问令牌启动。也许有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 2021-02-27
    • 1970-01-01
    • 2022-06-27
    相关资源
    最近更新 更多