Вы можете сделать это одной строкой кода.
В 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.