Использование Path, чтобы проверить, существует ли файл при запуске скрипта за пределами каталога - PullRequest
0 голосов
/ 26 января 2020

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

from pathlib import Path

if Path("main.conf").is_file():
    pass
else:
   setup_config()

Пока это работает, пока я нахожусь в каталоге, где я запускаю скрипт, я бы хотел сделать это работай в любом каталоге и просто запускай скрипт. Я знаю, что это не работает, потому что он ожидает, что файл main.conf находится в каталоге, в котором я сейчас нахожусь, но как мне указать путь, чтобы проверять только папку, в которой находится скрипт?

1 Ответ

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

Вы можете определить абсолютный путь к скрипту, используя sys.argv[0], а затем заменить имя этого скрипта на файл конфигурации для проверки, например:

import sys
import pathlib

path = path.Pathlib(sys.argv[0]).resolve()
if path.with_name('main.conf').is_file():
    # ...
else:
    # ...

Хотя это выглядит как вам, вероятно, не стоит беспокоиться об этой проверке и структурировать ваш setup_config, поэтому он принимает имя файла в качестве аргумента, например:

def setup_config(filename):
    # use with to open file here
    with open(filename) as fin:
        # do whatever for config setup

Затем оберните ваш main в try / исключением (которое также будет охватывать файл не существует / не может открыть файл по другим причинам), например:

path = pathlib.Path(sys.argv[0]).resolve()
try:
    setup_config(path.with_name('main.conf'))
except IOError:
    pass
...