Dado o seguinte formato ( .properties ou .ini ):
propertyName1=propertyValue1
propertyName2=propertyValue2
...
propertyNameN=propertyValueN
Para Java, há a classe Propriedades que oferece funcionalidade para analisar / interagir com o formato acima.
Existe algo semelhante em python é padrão biblioteca (2.x)?
Caso contrário, que outras alternativas eu tenho?
python
properties
Andrei Ciobanu
fonte
fonte
Respostas:
Para arquivos .ini, existe o módulo ConfigParser que fornece um formato compatível com arquivos .ini.
De qualquer forma, não há nada disponível para analisar arquivos .properties completos, quando preciso fazer isso, simplesmente uso jython (estou falando sobre scripts).
fonte
Consegui fazer isso funcionar
ConfigParser
, ninguém mostrou nenhum exemplo de como fazer isso, então aqui está um simples leitor python de um arquivo de propriedades e um exemplo do arquivo de propriedades. Observe que a extensão ainda está.properties
, mas eu tive que adicionar um cabeçalho de seção semelhante ao que você vê nos arquivos .ini ... um pouco de bastardização, mas funciona.O arquivo python:
PythonPropertyReader.py
O arquivo de propriedades:
ConfigFile.properties
Para obter mais funcionalidades, leia: https://docs.python.org/2/library/configparser.html
fonte
Um arquivo de propriedades java também é frequentemente um código python válido. Você pode renomear seu arquivo myconfig.properties para myconfig.py. Em seguida, basta importar seu arquivo, assim
e acesse as propriedades diretamente
fonte
prop.name="val"
seja, não vai funcionar nesse caso.A java properties file is valid python code
: Eu tenho que diferir. Alguns arquivos de propriedades Java passam por código python válido, mas certamente não todos. Como @mmjj disse que os pontos são um problema. O mesmo acontece com cadeias literais sem aspas. -1.Sei que essa é uma pergunta muito antiga, mas preciso dela agora e resolvi implementar minha própria solução, uma solução python pura, que cobre a maioria dos casos de uso (não todos):
Você pode alterar
sep
para ':' para analisar arquivos com o formato:O código analisa corretamente as linhas como:
Você receberá um ditado com:
fonte
foo = "bar" # bat
.foo
com valor"bar" # bat
.l = line.strip()
paral = line.split(comment_char)[0].strip()
e verificar apenas sel
tem um valor na linha subsequente comif l:
.Se você tem uma opção de formatos de arquivo, sugiro usar o .ini e o ConfigParser do Python, conforme mencionado. Se você precisar de compatibilidade com arquivos Java .properties, escrevi uma biblioteca chamada jprops . Estávamos usando pyjavaproperties, mas depois de encontrar várias limitações, acabei implementando as minhas. Possui suporte completo para o formato .properties, incluindo suporte unicode e melhor suporte para seqüências de escape. O Jprops também pode analisar qualquer objeto semelhante a um arquivo, enquanto pyjavaproperties funciona apenas com arquivos reais no disco.
fonte
se você não possui propriedades de várias linhas e uma necessidade muito simples, algumas linhas de código podem resolver isso para você:
Arquivo
t.properties
:Código Python:
fonte
Isso não é exatamente propriedades, mas o Python possui uma boa biblioteca para analisar arquivos de configuração. Veja também esta receita: Uma substituição python para java.util.Properties .
fonte
Aqui está o link para o meu projeto: https://sourceforge.net/projects/pyproperties/ . É uma biblioteca com métodos para trabalhar com arquivos * .properties para o Python 3.x.
Mas não é baseado em java.util.Properties
fonte
Esta é uma substituição individual do java.util.Propeties
Do documento:
fonte
Você pode usar um objeto semelhante a arquivo
ConfigParser.RawConfigParser.readfp
definido aqui -> https://docs.python.org/2/library/configparser.html#ConfigParser.RawConfigParser.readfpDefina uma classe que substitui
readline
que adiciona um nome de seção antes do conteúdo real do seu arquivo de propriedades.Empacotei na classe que retorna uma
dict
de todas as propriedades definidas.fonte
eu usei isso, essa biblioteca é muito útil
fonte
Isto é o que estou fazendo no meu projeto: eu apenas crio outro arquivo .py chamado properties.py que inclui todas as variáveis / propriedades comuns que usei no projeto e, em qualquer arquivo, é necessário referir-se a essas variáveis.
Usei esse método para manter o svn em paz quando eu estava mudando os locais de desenvolvimento com frequência e algumas variáveis comuns eram bastante relativas ao ambiente local. Funciona bem para mim, mas não tenho certeza se esse método seria sugerido para o ambiente formal de desenvolvimento, etc.
fonte
Conteúdo do test.json: {"host": "127.0.0.1", "usuário": "jms"}
fonte
Eu criei um módulo python que é quase semelhante à classe Properties do Java (na verdade, é como o PropertyPlaceholderConfigurer na primavera, que permite usar $ {variable-reference} para se referir à propriedade já definida)
EDIT: Você pode instalar este pacote executando o comando (atualmente testado para python 3).
pip install property
O projeto está hospedado no GitHub
Exemplo: (documentação detalhada pode ser encontrada aqui )
Digamos que você tenha as seguintes propriedades definidas no arquivo my_file.properties
Código para carregar as propriedades acima
fonte
Se você precisar ler todos os valores de uma seção no arquivo de propriedades de uma maneira simples:
O
config.properties
layout do seu arquivo:Você codifica:
Isso fornecerá um dicionário onde as chaves são iguais às do arquivo de configuração e seus valores correspondentes.
details_dict
é :Agora, para obter o valor de key1:
details_dict['key1']
Colocando tudo isso em um método que lê essa seção do arquivo de configuração apenas uma vez (na primeira vez em que o método é chamado durante a execução do programa).
Agora chame a função acima e obtenha o valor da chave necessária:
-------------------------------------------------- -----------
Estendendo a abordagem mencionada acima, lendo seção por seção automaticamente e acessando pelo nome da seção seguido pelo nome da chave.
Acessar:
(aqui 'DB' é um nome de seção no arquivo de configuração e 'port' é uma chave na seção 'DB'.)
fonte
Abaixo, duas linhas de código mostram como usar o Python List Comprehension para carregar o arquivo de propriedades 'java style'.
Confira abaixo o post para obter detalhes https://ilearnonlinesite.wordpress.com/2017/07/24/reading-property-file-in-python-using-comprehension-and-generators/
fonte
você pode usar o parâmetro "fromfile_prefix_chars" com argparse para ler o arquivo de configuração como abaixo ---
temp.py
arquivo de configuração
Comando de execução
fonte
Eu fiz isso usando o ConfigParser da seguinte maneira. O código supõe que exista um arquivo chamado config.prop no mesmo diretório em que o BaseTest é colocado:
config.prop
BaseTest.py:
fonte
Isto é o que eu escrevi para analisar o arquivo e defini-lo como variáveis env, que ignora comentários e linhas de valor que não são chaves adicionadas para especificar hg: d
e especifique o arquivo de propriedades que precisa ser analisado, por exemplo: python EnvParamSet.py -c # -s = env.properties
fonte
O Lightbend lançou a biblioteca Typesafe Config , que analisa arquivos de propriedades e também algumas extensões baseadas em JSON. A biblioteca do Lightbend é apenas para a JVM, mas parece ser amplamente adotada e agora existem portas em vários idiomas, incluindo Python: https://github.com/chimpler/pyhocon
fonte
Você pode usar a seguinte função, que é o código modificado de @mvallebr. Ele respeita os comentários do arquivo de propriedades, ignora novas linhas vazias e permite recuperar um único valor de chave.
fonte
isso funciona para mim.
fonte
Eu segui a abordagem do configparser e funcionou muito bem para mim. Criou um arquivo PropertyReader e usou o analisador de configuração para preparar a propriedade correspondente a cada seção.
** Usado Python 2.7
Conteúdo do arquivo PropertyReader.py:
Conteúdo do arquivo de esquema de leitura:
Conteúdo do arquivo .properties:
fonte
crie um dicionário no seu módulo python e armazene tudo nele e acesse-o, por exemplo:
Agora, para acessá-lo, você pode simplesmente:
fonte