Полное имя пути в корневой переменной, возвращаемой в 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(".")
, Это преобразует ваш текущий путь в абсолютный путь, прежде чем вы начнете.