Почему python configParser.read может использовать только имя файла в качестве параметра для чтения файла конфигурации

Моя структура каталогов пакета python показана ниже:

./my_package
|---./lib
|   |----__init__.py
|   |----tools.py
|
|----__init__.py
|----my_package.py
|----setting.conf


В tools.py:

import ConfigParser

config = ConfigParser.RawConfigParser()
config.read('setting.conf')
debug = config.getboolean('default', 'debug')

Я не знаю, почему config.read работает. Я могу получить значение отладки в разделе по умолчанию.

1 ответ

Решение

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

Но если вы используете другой основной файл, расположенный где-то еще, это может дать сбой.

Вот простой способ заставить его работать в любом случае: поскольку ваш инструмент находится на один уровень ниже файла конфигурации, путь к файлу конфигурации можно рассчитать следующим образом из tools.py модуль:

conf_file = os.path.join(os.path.dirname(os.path.dirname(__file__)),'setting.conf')

os.path.dirname(__file__) дает каталог, где tools.py расположен. Выполните еще один dirname чтобы получить каталог, в котором находится файл conf. Теперь вычислите абсолютное имя файла конфигурации, используя os.path.join

Другие вопросы по тегам