Ви можете зробити це в одному рядку коду.
У python 3 додайте підроблений заголовок розділу до даних конфігураційного файлу та передайте його read_string()
.
from configparser import ConfigParser
parser = ConfigParser()
with open("foo.conf") as stream:
parser.read_string("[top]\n" + stream.read())
Ви також можете використовувати itertools.chain()
для імітації заголовка розділу для read_file()
. Це може бути більш ефективним для пам'яті, ніж описаний вище підхід, що може бути корисно, якщо у вас є великі конфігураційні файли в обмеженому середовищі виконання.
from configparser import ConfigParser
from itertools import chain
parser = ConfigParser()
with open("foo.conf") as lines:
lines = chain(("[top]",), lines)
parser.read_file(lines)
У python 2 додайте підроблений заголовок розділу до даних конфігураційного файлу, оберніть результат в StringIO
об'єкт і передайте його readfp()
.
from ConfigParser import ConfigParser
from StringIO import StringIO
parser = ConfigParser()
with open("foo.conf") as stream:
stream = StringIO("[top]\n" + stream.read())
parser.readfp(stream)
З будь-яким із цих підходів ваші налаштування конфігурації будуть доступні у parser.items('top')
.
Ви можете використовувати StringIO і в python 3, можливо, для сумісності як зі старим, так і з новим інтерпретаторами python, але зверніть увагу, що він зараз живе в io
пакеті і readfp()
зараз застарів.
Як варіант, ви можете розглянути можливість використання синтаксичного аналізатора TOML замість ConfigParser.