Может ли Python configObj обрабатывать строку без '='
Я использую Python ConfigObj для загрузки файла конфигурации, он прекрасно работает, если файл конфигурации в шаблоне "cfgName=cfgvalue".
Теперь мне нужно написать файл конфигурации следующим образом:
basket.ini
[favoFruit]
Apple
Orange
можно (как) загрузить это как список favoFruit['Apple','Orange']
по ConfigObj?
Текущий я могу только получить сообщение об ошибке Invalid line at line "2"
когда используешь cfgObj=ConfigObj('basket.ini')
YAML или JSON могут сделать это, мой вопрос: ConfigObj может сделать это тоже?
1 ответ
configobj
не поддерживает списки, как вы пытаетесь их использовать, но как разделенные запятыми значения:
[fruit]
favourite = Apple, Orange
В вашем коде вам просто нужно получить доступ к атрибуту как обычно:
>>> cfg = configobj.ConfigObj('basket.ini')
>>> cfg['fruit']['favourite']
['Apple', 'Orange']
Для получения дополнительной информации, пожалуйста, посмотрите на эту статью.
Редактировать: Если вам действительно нужно поддерживать файл конфигурации с тем же форматом, что и в вашем вопросе, обратите внимание, что было бы легко написать собственный анализатор для него:
import re
from collections import defaultdict
def parse(f):
data = defaultdict(list)
section = None
for line in f:
line = line.strip()
if not line:
continue
match = re.match('\[(?P<name>.*)\]', line)
if match:
section = match.group('name')
else:
data[section].append(line)
return data
cfg = parse(open('basket.ini'))
print cfg['favoFruit']
Пример вывода:
["Яблоко", "Апельсин"]