Python: os.chdir() 在 for 循环中无效?

1 投票
2 回答
2491 浏览
提问于 2025-04-17 08:10

我正在尝试制作一个自定义的文件夹导航功能,简单来说就是我需要进入一个文件夹,然后探索里面的每一个子文件夹,并在每个文件夹里运行一个函数。

在我尝试在一个循环中更改目录时遇到了问题。我有一个叫“findDirectories”的函数:

def findDirectories(list):
    for files in os.listdir("."):
        print (files)
        list.append(files)
        os.chdir("y")

最后一行代码引发了问题。如果我把它去掉,函数就只会列出那个文件夹里的所有子文件夹。不幸的是,这意味着每次进入一个子文件夹时我都得重新运行这个函数,不能一次性运行整个过程。我指定了“y”这个文件夹,因为它确实存在,但即使这样,程序在打开时也会崩溃。把os.chdir("y")放在循环外面就没有问题。

我对Python还不太熟悉,但对编程本身有一些了解。我该怎么做才能让这个功能正常工作,或者有没有更好的方法?我最终需要的结果是对这个文件夹里每一个名为“*Response.xml”的文件运行一个函数,不管它们嵌套得多深。

2 个回答

2

你没有提供具体的错误信息,但很明显,你指定的 y 是一个相对路径,所以它并没有按预期工作。

这样的话,在循环的第一次迭代中,可能会成功地改变为 y,但在第二次迭代时,它会试图改变为一个名为 y子目录

而这个子目录你可能并不存在。

你应该尝试做类似这样的事情:

import os

for dirName, subDirs, fileNames in os.walk(rootPath):
    # its not clear which files you want, I assume anything that ends with Response.xml?
    for f in fileNames:
        if f.endswith("Response.xml"):
            # this is the path you will want to use
            filePath = os.path.join(dirName, f)

            # now do something with it!
            doSomethingWithFilePath(filePath)

这个代码没有经过测试,但你明白这个思路就好……

1

正如Dan所说,使用os.walk会更好。你可以看看那里的例子。

撰写回答