Полное имя пути в корневой переменной, возвращаемой в os.walk

Я использую os.walk для запуска дерева каталогов, проверяю наличие входных файлов, а затем запускаю программу, если есть правильные входные данные. Я заметил, что у меня проблема из-за того, что os.walk оценивает корневую переменную в цикле:

for root, dirs, files in os.walk('.'):# I use '.' because I want the walk to 
                                      # start where I run the script. And it 
                                      # will/can change
    if "input.file" in files:
         infile = os.path.join(root,"input.file")
         subprocess.check_output("myprog input.file", Shell=True)
                                      # if an input file is found, store the path to it 
                                      # and run the program

Это вызывает у меня проблему, потому что инфильная строка выглядит следующим образом

  ./path/to/input.file 

Когда программа должна выглядеть так, чтобы программа могла ее найти

 /home/start/of/walk/path/to/input.file

Я хочу знать, есть ли лучший метод / другой способ использования os.walk, чтобы я мог оставить начальный каталог произвольным, но при этом иметь возможность использовать полный путь к любым файлам, которые он находит для меня. Спасибо

Программа, которую я использую, написана мной на C++, и я полагаю, что я мог бы также изменить ее. Но я не спрашиваю о том, как сделать это в этом вопросе, просто чтобы прояснить этот вопрос, о os.walk и связанных с ним темах в Python, поэтому здесь нет примеров моего кода на C++.

1 ответ

Решение

Вместо того, чтобы использовать ., преобразовать его в абсолютный путь, используя os.path.abspath("."), Это преобразует ваш текущий путь в абсолютный путь, прежде чем вы начнете.

Другие вопросы по тегам