O arquivo típico do ConfigParser gerado é semelhante a:
[Section]
bar=foo
[Section 2]
bar2= baz
Agora, existe uma maneira de indexar listas como, por exemplo:
[Section 3]
barList={
item1,
item2
}
Pergunta relacionada: Chaves exclusivas do ConfigParser do Python por seção
python
configparser
pistacchio
fonte
fonte
Também um pouco tarde, mas talvez seja útil para alguns. Estou usando uma combinação de ConfigParser e JSON:
basta ler com:
Você pode até quebrar linhas se sua lista for longa (obrigado @ peter-smit):
É claro que eu poderia usar o JSON, mas acho os arquivos de configuração muito mais legíveis e a seção [PADRÃO] muito útil.
fonte
key5 : [r"abc $x_i$", r"def $y_j$"]
? Elesjson.decoder.JSONDecodeError: Expecting value: line 1 column 2 (char 1)
Chegando atrasado para esta festa, mas recentemente implementei isso com uma seção dedicada em um arquivo de configuração para uma lista:
e use
config.items( "paths" )
para obter uma lista iterável de itens de caminho, assim:Espero que isso ajude outras pessoas pesquisando essa questão no Google;)
fonte
; comment
retirar determinados itens da lista sem precisar reescrever a lista inteira.key
, como ConfigParser converte todas essas chaves para minúsculoconfig = ConfigParser.SafeConfigParser()
config.optionxform = str
Então o caso será deixado em pazUma coisa que muitas pessoas não sabem é que valores de configuração de várias linhas são permitidos. Por exemplo:
O valor de
config.get('hello','barlist')
agora será:Que você pode facilmente dividir com o método splitlines (não se esqueça de filtrar itens vazios).
Se olharmos para um grande quadro como o Pyramid, eles estão usando esta técnica:
Fonte
Eu mesmo, talvez estenderia o ConfigParser se isso é algo comum para você:
Observe que há algumas coisas a serem observadas ao usar esta técnica
fonte
.splitlines()
vez de.split()
? Usando o comportamento padrão de cada um, a divisão é claramente superior (filtra as linhas em branco). A menos que eu estou faltando alguma coisa ...Se você quiser passar literalmente uma lista, poderá usar:
Por exemplo configuração:
O código é:
resultado:
fonte
ast.literal_eval()
ao comparar com o (sem dúvida mais popular)json.loads()
? Eu acho que o último fornece mais segurança, não?Nenhuma menção ao
converters
kwargConfigParser()
em qualquer uma dessas respostas foi bastante decepcionante.De acordo com a documentação, você pode passar um dicionário para
ConfigParser
que adicione umget
método para os proxies do analisador e da seção. Então, para uma lista:example.ini
Exemplo de analisador:
Esse é o meu favorito, pois nenhuma subclasse é necessária e não preciso depender de um usuário final para escrever perfeitamente JSON ou uma lista que possa ser interpretada
ast.literal_eval
.fonte
Eu cheguei aqui procurando consumir isso ...
A resposta é dividi-la na vírgula e retirar os espaços:
Para obter um resultado da lista:
Pode não responder exatamente à pergunta do OP, mas pode ser a resposta simples que algumas pessoas estão procurando.
fonte
[email protected]
! Não é de admirar que minhas correspondências continuem saltando! > _ <Isto é o que eu uso para listas:
conteúdo do arquivo de configuração:
código:
funciona para cordas
em caso de números
conteúdo de configuração:
código:
obrigado.
fonte
Então, outra maneira, que eu prefiro, é apenas dividir os valores, por exemplo:
Pode ser carregado dessa maneira em uma lista de cadeias ou números inteiros, da seguinte maneira:
Esse método evita que você precise agrupar seus valores entre parênteses para carregar como JSON.
fonte
Apenas tipos primitivos são suportados para serialização pelo analisador de configuração. Eu usaria JSON ou YAML para esse tipo de requisito.
fonte
Eu enfrentei o mesmo problema no passado. Se você precisar de listas mais complexas, considere criar seu próprio analisador herdando do ConfigParser. Em seguida, você sobrescreveria o método get com isso:
Com esta solução, você também poderá definir dicionários no seu arquivo de configuração.
Mas tenha cuidado! Isso não é tão seguro: significa que qualquer pessoa pode executar o código através do seu arquivo de configuração. Se a segurança não for um problema no seu projeto, eu consideraria o uso direto de classes python como arquivos de configuração. O seguinte é muito mais poderoso e descartável que um arquivo ConfigParser:
fonte
barList=item1,item2
e depois chamarif value.find(',') > 0: return value.split(',')
, ou melhor ainda, fazer com que o aplicativo analise todas as opções de configuração como listas e.split(',')
tudo cegamente?Então agora meu
config.cfg
arquivo, que poderia ser assim:Pode ser analisado em objetos suficientemente refinados para o meu pequeno projeto.
Isso é para uma análise muito rápida de configurações simples, você perde toda a capacidade de buscar entradas, bools e outros tipos de saída sem transformar o objeto retornado
Parser
ou refazer o trabalho de análise realizado pela classe Parser em outro lugar.fonte
Concluí tarefa semelhante no meu projeto com seção com chaves sem valores:
Resultado:
app.config:
fonte
json.loads
&ast.literal_eval
parece estar funcionando, mas uma lista simples dentro da configuração está tratando cada caractere como byte, retornando ainda um colchete ...ou seja, se a configuração tiver
fieldvalue = [1,2,3,4,5]
depois
config.read(*.cfg)
config['fieldValue'][0]
retornando[
no lugar de1
fonte
Conforme mencionado por Peter Smit ( https://stackoverflow.com/a/11866695/7424596 ), convém estender o ConfigParser; além disso, um interpolador pode ser usado para converter automaticamente para e da lista.
Para referência na parte inferior, você pode encontrar um código que converte automaticamente a configuração como:
Portanto, se você solicitar chaves, receberá:
Código:
fonte