Как читать файл конфигурации с помощью python
У меня есть файл конфигурации abc.txt
, который выглядит примерно так:
path1 = "D:\test1\first"
path2 = "D:\test2\second"
path3 = "D:\test2\third"
Я хочу прочитать эти пути из abc.txt
, чтобы использовать его в моей программе, чтобы избежать жесткого кодирования.
Ответы
Ответ 1
Чтобы использовать мой пример, ваш файл "abc.txt" должен выглядеть так:
[your-config]
path1 = "D:\test1\first"
path2 = "D:\test2\second"
path3 = "D:\test2\third"
Затем в вашем программном обеспечении вы можете использовать парсер конфигурации:
import ConfigParser
а затем в вашем коде:
configParser = ConfigParser.RawConfigParser()
configFilePath = r'c:\abc.txt'
configParser.read(configFilePath)
Случай использования:
self.path = configParser.get('your-config', 'path1')
* Редактировать (@human.js)
в python 3, ConfigParser переименовывается в configparser (как описано здесь)
Ответ 2
Вам нужен раздел в вашем файле:
[My Section]
path1 = D:\test1\first
path2 = D:\test2\second
path3 = D:\test2\third
Затем прочитайте свойства:
import ConfigParser
config = ConfigParser.ConfigParser()
config.readfp(open(r'abc.txt'))
path1 = config.get('My Section', 'path1')
path2 = config.get('My Section', 'path2')
path3 = config.get('My Section', 'path3')
Ответ 3
Это выглядит как действительный код Python, поэтому, если файл находится в вашем пути к классу проекта (а не в каком-либо другом каталоге или в произвольных местах), одним из способов было бы просто переименовать файл в "abc.py" и импортировать его как модуль, используя import abc
. Вы даже можете обновить значения с помощью функции reload
позже. Затем получите доступ к значениям abc.path1
и т.д.
Конечно, это может быть опасно, если файл содержит другой код, который будет выполнен. Я бы не использовал его в каком-либо реальном профессиональном проекте, но для небольшого script или в интерактивном режиме это, кажется, самое простое решение.
Просто поместите abc.py
в тот же каталог, что и ваш script, или каталог, в котором вы открываете интерактивную оболочку, и делаете import abc
или from abc import *
.
Ответ 4
Так как ваш файл конфигурации является обычным текстовым файлом, просто прочитайте его с помощью функции open
:
file = open("abc.txt", 'r')
content = file.read()
paths = content.split("\n") #split it into lines
for path in paths:
print path.split(" = ")[1]
Это напечатает ваши пути. Вы также можете сохранить их, используя словари или.
path_list = []
path_dict = {}
for path in paths:
p = path.split(" = ")
path_list.append(p)[1]
path_dict[p[0]] = p[1]
Подробнее о чтении/записи файла здесь.
Надеюсь, это поможет!
Ответ 5
Если вам нужно прочитать все значения из раздела в файле свойств простым способом:
Ваше расположение файла config.properties
:
[SECTION_NAME]
key1 = value1
key2 = value2
Вы код:
import configparser
config = configparser.RawConfigParser()
config.read('path_to_config.properties file')
details_dict = dict(config.items('SECTION_NAME'))
Это даст вам словарь, в котором ключи такие же, как в конфигурационном файле, и соответствующие им значения.
details_dict
это:
{'key1':'value1', 'key2':'value2'}
Теперь, чтобы получить значение key1: details_dict['key1']
Помещение всего этого в метод, который читает этот раздел из файла конфигурации только один раз (при первом вызове метода во время выполнения программы).
def get_config_dict():
if not hasattr(get_config_dict, 'config_dict'):
get_config_dict.config_dict = dict(config.items('SECTION_NAME'))
return get_config_dict.config_dict
Теперь вызовите вышеуказанную функцию и получите требуемое значение ключа:
config_details = get_config_dict()
key_1_value = config_details['key1']
-------------------------------------------------- -----------
Расширение подхода, упомянутого выше, автоматическое чтение раздела за разделом, а затем доступ по имени раздела, за которым следует имя ключа.
def get_config_section(): if not hasattr(get_config_section, 'section_dict'): get_config_section.section_dict = dict() for section in config.sections(): get_config_section.section_dict[section] = dict(config.items(section)) return get_config_section.section_dict
Для доступа:
config_dict = get_config_section()
port = config_dict['DB']['port']
(здесь "DB" - это имя раздела в конфигурационном файле, а "port" - это ключ в разделе "DB".)