Как получить доступ к файлу на уровне пути ниже из подпапки - PullRequest
1 голос
/ 31 января 2020

Допустим, у меня есть файл с именем credentials.json в моем текущем каталоге, переменная окружения MY_CREDENTIALS=credentials.json и скрипт main.py, который использует эту переменную окружения через os.getenv('MY_CREDENTIALS').

Теперь предположим, что я создаю подпапку и помещаю туда что-то вроде этого: /subfolder/my_other_script.py. Если я печатаю os.getenv('MY_CREDENTIALS'), тогда я действительно получаю credentials.json, но я не могу использовать этот файл, так как он находится в моем каталоге root (не в /subfolder). Итак, как я могу использовать этот файл, хотя он находится в каталоге root? Единственное, что работает для меня, - это сделать копию credentials.json в /subfolder, но тогда у меня будет несколько копий этого файла, и я этого не хочу.

Спасибо за ваш ответ!

Ответы [ 2 ]

1 голос
/ 31 января 2020

Примерно так может работать:

from pathlib import Path
import os

FILENAME = os.getenv('MY_CREDENTIALS')
filePath = Path(FILENAME)

if filePath.exists() and filePath.is_file():
    print("Success: File exists")
    print(filePath.read_text())
else:
    print("Error: File does not exist. Getting file from level below.")
    print((filePath.absolute().parent.parent / filePath.name).read_text())

По сути, вы проверяете, существует ли ваш файл в текущей папке. Это будет иметь место, если ваш скрипт находится в вашей папке root. Если это не так, вы предполагаете, что находитесь в подпапке. Таким образом, вы пытаетесь получить файл с уровня ниже (ваш root). Он не полностью готов к работе, но для конкретного случая c, который вы упомянули, он должен работать. В производстве вам следует подумать о случаях, когда у вас может быть вложенная подпапка или ваш файл отсутствует навсегда.

0 голосов
/ 31 января 2020

Вы можете создать символ c ссылку

os.symlink('<root>', '<subfolder>')

https://docs.python.org/3/library/os.html#os .symlink

...