Как читать файлы из Python скриптов, вызываемых из любого места - PullRequest
2 голосов
/ 17 июня 2020

Я пишу фрагмент кода Python, который требует чтения файла из относительной позиции самого скрипта.

Это структура папок:

.
+-- cache
|   +-- ..
|   +-- population.json
+-- src
|   +-- ..
|   +-- script.py
+-- ..

I пробовал что-то вроде этого:

folder = os.path.dirname(os.path.realpath("__file__"))
path = os.path.join(folder, "..{0}cache{1}population.json".format(os.path.sep, os.path.sep))
with open(path) as f:
    population = load(f)

Проблема в том, что folder всегда устанавливается в текущую папку, из которой я вызываю скрипт.

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

1 Ответ

2 голосов
/ 17 июня 2020

Проблема в том, что вы основываете операцию на литеральной строке "__file__", которая python предполагает имя файла в текущем рабочем каталоге. Вы хотите использовать __file__, переменную , содержащую имя сценария.

Немного странно смешивать os.path и пути, созданные вручную. Но такие вещи, как os.path.dirname(os.path.dirname(...)), быстро становятся утомительными. Альтернативой является более компактный pathlib

from path lib import Path
path = Path(__file__).absolute().parents[1].joinpath('cache', 'population.json')

Но это всего лишь FYI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...