2011-12-12 53 views
0

我试图让自制路径导航功能工作 - 基本上我需要通过一个文件夹,并探索其中的每个文件夹,在每个文件夹内运行一个功能。Python:os.chdir()不在for循环中工作?

当我尝试更改for循环中的目录时,出现问题。我有这个“findDirectories”函数:

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

最后一行导致问题。如果我删除它,该函数只是编译该文件夹中所有文件夹的列表。不幸的是,这意味着每次我下载一个文件夹时都必须运行它,我不能只运行一次。我已经指定了文件夹“y”,因为这是一个真正的文件夹,但即使打开该文件,程序也会崩溃。在for循环之外执行os.chdir(“y”)完全没有问题。

我是新来的Python,但不是一般的编程。我怎样才能使这个工作,或者有更好的方法?我需要的最终结果是在该文件夹中存在的每个“* Response.xml”文件上运行一个函数,而不管它的嵌套程度如何。

+4

你为什么不使用'os.walk'或'os.path.walk '? –

+0

“程序崩溃”是什么意思?可能你会得到一些错误信息? – sth

+0

你究竟想做什么?正如在一个答案中指出的那样,只要您承认,每次只更改为'y'都是行不通的。 –

回答

1

正如丹说的,os.walk会更好。看到那里的例子。

+0

我只是用“y”作为例子,因为那肯定会起作用。我没有假设每个文件夹被称为“y”,而是我会使用类似os.chdir(文件)的东西。我会看看os.walk,谢谢。 – morgoe

+0

谢谢,我现在有这个工作。 – morgoe

2

那么,你不发布实际错误的追溯,但显然它不工作,因为你已经指定y作为相对路径。

因此它可能是能够在循环的第一次迭代更改为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) 

那是未经检验的,但你有想法...