Подтвердить что ты не робот

Как читать файл конфигурации с помощью python

У меня есть файл конфигурации abc.txt, который выглядит примерно так:

path1 = "D:\test1\first"
path2 = "D:\test2\second"
path3 = "D:\test2\third"

Я хочу прочитать эти пути из abc.txt, чтобы использовать его в моей программе, чтобы избежать жесткого кодирования.

4b9b3361

Ответ 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".)