Python: os.chdir () не работает внутри цикла for? - PullRequest
1 голос
/ 12 декабря 2011

Я пытаюсь заставить работать самодельную функцию навигации по пути - в основном мне нужно пройти через одну папку и исследовать каждую папку в ней, запустив функцию в каждой папке.Я пытаюсь изменить каталоги в течение цикла.У меня есть эта функция "findDirectories":

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

Последняя строка вызывает проблемы.Если я удаляю его, функция просто составляет список со всеми папками в этой папке.К сожалению, это означает, что я должен запускать это каждый раз, когда я захожу в папку, я не могу просто запустить все это один раз.Я указал папку "y" как настоящую папку, но программа вылетает при открытии даже с этим.Выполнение os.chdir ("y") вне цикла for не имеет никаких проблем.

Я новичок в Python, но не в программировании вообще.Как я могу заставить это работать, или есть лучший способ?В конечном итоге мне нужно запустить функцию для каждого отдельного файла "* Response.xml", который существует в этой папке, независимо от того, насколько глубоко он вложен.

Ответы [ 2 ]

2 голосов
/ 12 декабря 2011

Ну, вы не публикуете трассировку фактической ошибки, но очевидно, что она не работает, так как вы указали 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)

Это не проверено, но у вас есть идея ...

1 голос
/ 12 декабря 2011

Как сказал Дэн, os.walk будет лучше.Смотрите пример там.

...