Как правильно передать путь к файлу в функцию open() python
Нужна помощь более опытных в этом деле людей. Занимаюсь автоматизацией тестирования. И возник вопрос. У меня есть структура проекта:
My first project
Test results
Studying project
Tests
В папке Test хранятся тесты. При прохождении этих тестов, я хочу отлавливать ошибки, которые возникают в консоли при прохождении тестов и записывать их в файлик, который называется скажем console_errors.txt и помещать этот файлик в папку Tests results.
С помощью конструкции
with open(‘Test results/results.txt’, ‘a+’) as file:
file.write(error msg)
я пытаюсь открыть этот файлик и записать в него данные. Ну либо же, как в моем случае, создать его, потому что в папке Tests results такого файлика нет и на каждый прогон тестов будет новый файлик.
Но когда я запускаю тесты из папки Tests, то у меня падает ошибка, что такого файла или каталога не существует. Я закинул в переменную путь к этой папке Tests results, чтобы через дебаггер посмотреть, почему ругается. И оказалось, что пайтон строит мне такой путь:
My first project/Studying project/Tests/Tests results/results.txt
То есть он пытается найти папку Test results внутри папки Tests, хотя она на уровень выше. Я даже пробовал через os получить абсолютный путь к папке Tests results и передать в функцию open() абсолютный путь, но питон подменяет его на кривой такого типа:
D:/Autotests/My first project/Studying project/Tests/Tests results/results.txt
и снова не может найти папку.
Подскажите, как передать путь так, чтобы при запуске тестов из папки Tests, питон не искал папку Tests results внутри папки Tests и не ругался на меня, что такого пути нет.
Буду рад любой помощи
Ответы (1 шт):
То есть он пытается найти папку Test results внутри папки Tests, хотя она на уровень выше.
Код понятия не имеет, какие у вас там папки на уровень выше. Почему вы вдруг подумали, что он будет использовать какую-то папку по соседству? А если у вас на диске еще несколько папок с таким же названием, то что должен был бы делать код?
Ищется не папка Test results, которая у вас в папке My first project, а папка Test results, которая записана в строчке with open(‘Test results/results.txt’, ‘a+’) as file (кстати, это нерабочий код, потому что неправильные кавычки). Это разные Test results, которые не имеют ничего общего, кроме названия, и если бы вы назвали их по-разному, то сразу бы увидели корень проблемы.
Строчка with open(‘Test results/results.txt’, ‘a+’) as file открывает файл по указанному пути относительно той папки, в которой находится скрипт. Скрипт находится в папке
D:/Autotests/My first project/Studying project/Tests
поэтому полный путь к файлу получается
D:/Autotests/My first project/Studying project/Tests/Tests results/results.txt
Все так, как и должно быть.
Нужно в пути добавить уровень выше (или даже два)
with open(‘../Test results/results.txt’, ‘a+’) as file
И исправить кавычки на правильные.