Типичный сгенерированный файл ConfigParser выглядит так:
[Section]
bar=foo
[Section 2]
bar2= baz
Теперь, есть ли способ индексировать списки, такие как, например:
[Section 3]
barList={
item1,
item2
}
Смежный вопрос: уникальные ключи Python ConfigParser для каждого раздела
python
configparser
pistacchio
источник
источник
Также немного поздно, но может быть полезно для некоторых. Я использую комбинацию ConfigParser и JSON:
просто прочитайте это с:
Вы можете даже разбить строки, если ваш список длинный (спасибо @ peter-smit):
Конечно, я мог бы просто использовать JSON, но я нахожу файлы конфигурации гораздо более удобочитаемыми, а раздел [DEFAULT] очень удобным.
источник
key5 : [r"abc $x_i$", r"def $y_j$"]
? Они поднимают ошибкуjson.decoder.JSONDecodeError: Expecting value: line 1 column 2 (char 1)
Я опаздываю на эту вечеринку, но недавно я реализовал это с помощью специального раздела в файле конфигурации для списка:
и использовать
config.items( "paths" )
для получения итеративного списка элементов пути, например так:Надеюсь, это поможет другим людям, погуглив этот вопрос;)
источник
; comment
исключить некоторые элементы из списка, не переписывая весь список.key
, так как ConfigParser преобразует все такие ключи в нижний регистрconfig = ConfigParser.SafeConfigParser()
config.optionxform = str
тогда дело будет оставлено в покоеМногие люди не знают, что допускается использование многострочных значений конфигурации. Например:
Значение
config.get('hello','barlist')
теперь будет:Которые вы легко можете разделить с помощью метода splitlines (не забудьте отфильтровать пустые элементы).
Если мы посмотрим на большой фреймворк, такой как Pyramid, они используют эту технику:
Источник
Сам, возможно, я бы расширил ConfigParser, если это обычная вещь для вас:
Обратите внимание, что есть несколько вещей, которые нужно учитывать при использовании этой техники
источник
.splitlines()
вместо.split()
? При использовании поведения каждого из них разделение явно лучше (отфильтровывает пустые строки). Если я что - то не хватает ...Если вы хотите буквально передать список, вы можете использовать:
Например, конфигурация:
Код является:
вывод:
источник
ast.literal_eval()
сравнению с использованием (возможно, более популярным)json.loads()
? Я думаю, что последний обеспечивает большую безопасность, нет?Никакое упоминание о
converters
kwargConfigParser()
в любом из этих ответов было довольно разочаровывающим.Согласно документации вы можете передать словарь
ConfigParser
, который добавитget
метод как для парсера, так и для прокси раздела. Итак, для списка:example.ini
Пример парсера:
Это мой личный фаворит, так как нет необходимости создавать подклассы, и мне не нужно полагаться на конечного пользователя, чтобы идеально написать JSON или список, который может быть интерпретирован
ast.literal_eval
.источник
Я приземлился здесь в поисках этого ...
Ответ состоит в том, чтобы разделить его на запятую и убрать пробелы:
Чтобы получить список результатов:
Он может не отвечать на вопрос ОП точно, но может быть простым ответом, который ищут некоторые люди.
источник
sorger@espionage.su
! Не удивительно, что моя почта продолжала подпрыгивать! > _ <Вот что я использую для списков:
содержимое файла конфигурации:
код:
это работает для строк
в случае чисел
содержание конфигурации:
код:
Спасибо.
источник
Поэтому другой способ, который я предпочитаю, это просто разделить значения, например:
Может быть загружен следующим образом в список строк или целых чисел:
Этот метод избавляет вас от необходимости заключать значения в скобки для загрузки в формате JSON.
источник
Только примитивные типы поддерживаются для сериализации конфигурационным парсером. Я бы использовал JSON или YAML для такого рода требований.
источник
Я сталкивался с той же проблемой в прошлом. Если вам нужны более сложные списки, рассмотрите возможность создания собственного синтаксического анализатора путем наследования от ConfigParser. Затем вы переписали бы метод get следующим образом:
С помощью этого решения вы также сможете определять словари в вашем конфигурационном файле.
Но будь осторожен! Это не так безопасно: это означает, что любой может запустить код через ваш конфигурационный файл. Если безопасность не является проблемой в вашем проекте, я хотел бы рассмотреть возможность использования непосредственно классов Python в качестве файлов конфигурации. Следующее является гораздо более мощным и затратным, чем файл ConfigParser:
источник
barList=item1,item2
а затем вызватьif value.find(',') > 0: return value.split(',')
, или, что еще лучше, приложение проанализировать все параметры конфигурации как списки, и только.split(',')
все вслепую?Итак, теперь мой
config.cfg
файл, который может выглядеть так:Можно разобрать на достаточно мелкозернистые объекты для моего небольшого проекта.
Это делается для очень быстрого анализа простых конфигов: вы теряете возможность извлекать целые, логические и другие типы выходных данных без преобразования объекта, возвращаемого из
Parser
, или повторного выполнения работы по анализу, выполняемой классом Parser в другом месте.источник
Я выполнил аналогичную задачу в своем проекте с разделом с ключами без значений:
Вывод:
app.config:
источник
json.loads
ast.literal_eval
Кажется, & работает, но простой список в конфигурации обрабатывает каждый символ как байт, возвращая даже квадратную скобку ....то есть если в конфиге есть
fieldvalue = [1,2,3,4,5]
затем
config.read(*.cfg)
config['fieldValue'][0]
возвращается[
на место1
источник
Как упомянул Питер Смит ( https://stackoverflow.com/a/11866695/7424596 ) Возможно, вы захотите расширить ConfigParser, кроме того, для автоматического преобразования в и из списка можно использовать Интерполятор.
Для справки внизу вы можете найти код, который автоматически преобразует конфигурацию, например
Поэтому, если вы запросите ключи, вы получите:
Код:
источник