Dado el siguiente formato ( .properties o .ini ):
propertyName1=propertyValue1
propertyName2=propertyValue2
...
propertyNameN=propertyValueN
Para Java existe la clase Propiedades que ofrece funcionalidad para analizar / interactuar con el formato anterior.
¿Hay algo similar en la biblioteca estándar de python (2.x)?
Si no, ¿qué otras alternativas tengo?
python
properties
Andrei Ciobanu
fuente
fuente
Respuestas:
Para los archivos .ini existe el módulo ConfigParser que proporciona un formato compatible con los archivos .ini.
De todos modos, no hay nada disponible para analizar archivos .properties completos, cuando tengo que hacer eso simplemente uso jython (estoy hablando de secuencias de comandos).
fuente
Pude hacer que esto funcione
ConfigParser
, nadie mostró ningún ejemplo sobre cómo hacer esto, así que aquí hay un simple lector de Python de un archivo de propiedades y un ejemplo del archivo de propiedades. Tenga en cuenta que la extensión todavía está.properties
, pero tuve que agregar un encabezado de sección similar a lo que ve en los archivos .ini ... un poco bastardo, pero funciona.El archivo python:
PythonPropertyReader.py
El archivo de propiedades:
ConfigFile.properties
Para obtener más funcionalidad, lea: https://docs.python.org/2/library/configparser.html
fuente
Un archivo de propiedades de Java a menudo también es un código válido de Python. Puede cambiar el nombre de su archivo myconfig.properties a myconfig.py. Luego solo importa tu archivo, así
y acceder a las propiedades directamente
fuente
prop.name="val"
es decir, no funcionará en este caso.A java properties file is valid python code
: Tengo que diferir. Algunos archivos de propiedades Java pasarán por un código python válido, pero ciertamente no todos. Como dijo @mmjj, los puntos son un problema. Así son las cadenas literales sin comillas. -1.Sé que esta es una pregunta muy antigua, pero la necesito justo ahora y decidí implementar mi propia solución, una solución pura de Python, que cubre la mayoría de los casos de uso (no todos):
Puede cambiar
sep
a ':' para analizar archivos con formato:El código analiza correctamente líneas como:
Obtendrá un dict con:
fuente
foo = "bar" # bat
.foo
con valor"bar" # bat
.l = line.strip()
al = line.split(comment_char)[0].strip()
y sólo comprobar sil
tiene un valor más bien en la línea posterior conif l:
.Si tiene una opción de formatos de archivo, sugiero usar .ini y ConfigParser de Python como se mencionó. Si necesita compatibilidad con los archivos Java .properties, he escrito una biblioteca llamada jprops . Estábamos usando pyjavaproperties, pero después de encontrar varias limitaciones, terminé implementando la mía. Tiene soporte completo para el formato .properties, incluyendo soporte unicode y mejor soporte para secuencias de escape. Jprops también puede analizar cualquier objeto similar a un archivo, mientras que pyjavaproperties solo funciona con archivos reales en el disco.
fuente
Si no tiene propiedades de varias líneas y una necesidad muy simple, unas pocas líneas de código pueden resolverlo por usted:
Archivo
t.properties
:Código de Python:
fuente
Esto no es exactamente propiedades, pero Python tiene una buena biblioteca para analizar archivos de configuración. Consulte también esta receta: un reemplazo de Python para java.util.Properties .
fuente
Aquí hay un enlace a mi proyecto: https://sourceforge.net/projects/pyproperties/ . Es una biblioteca con métodos para trabajar con archivos * .properties para Python 3.x.
Pero no se basa en java.util.Properties
fuente
Este es un reemplazo uno a uno de java.util.Propeties
Del documento:
fuente
Puede usar un objeto similar a un archivo
ConfigParser.RawConfigParser.readfp
definido aquí -> https://docs.python.org/2/library/configparser.html#ConfigParser.RawConfigParser.readfpDefina una clase que sustituya y
readline
que agregue un nombre de sección antes del contenido real de su archivo de propiedades.Lo he empaquetado en la clase que devuelve una
dict
de todas las propiedades definidas.fuente
He usado esto, esta biblioteca es muy útil
fuente
Esto es lo que estoy haciendo en mi proyecto: acabo de crear otro archivo .py llamado properties.py que incluye todas las variables / propiedades comunes que utilicé en el proyecto, y en cualquier archivo necesito referirme a estas variables, poner
Usé este método para mantener la paz cuando estaba cambiando las ubicaciones de desarrollo con frecuencia y algunas variables comunes eran bastante relativas al entorno local. Funciona bien para mí, pero no estoy seguro de que este método se sugiera para un entorno de desarrollo formal, etc.
fuente
Contenido de test.json: {"host": "127.0.0.1", "user": "jms"}
fuente
He creado un módulo de Python que es casi similar a la clase de propiedades de Java (en realidad es como el PropertyPlaceholderConfigurer en primavera que le permite usar $ {variable-reference} para referirse a la propiedad ya definida)
EDITAR: puede instalar este paquete ejecutando el comando (actualmente probado para python 3).
pip install property
El proyecto está alojado en GitHub
Ejemplo: (La documentación detallada se puede encontrar aquí )
Supongamos que tiene las siguientes propiedades definidas en el archivo my_file.properties
Código para cargar las propiedades anteriores
fuente
Si necesita leer todos los valores de una sección en el archivo de propiedades de una manera simple:
Su
config.properties
diseño de archivo:Usted codifica:
Esto le dará un diccionario donde las claves son las mismas que en el archivo de configuración y sus valores correspondientes.
details_dict
es :Ahora para obtener el valor de key1:
details_dict['key1']
Poniendo todo en un método que lee esa sección del archivo de configuración solo una vez (la primera vez que se llama al método durante la ejecución de un programa).
Ahora llame a la función anterior y obtenga el valor de la clave requerida:
-------------------------------------------------- -----------
Extendiendo el enfoque mencionado anteriormente, leyendo sección por sección automáticamente y luego accediendo por nombre de sección seguido de nombre de clave.
Acceder:
(aquí 'DB' es un nombre de sección en el archivo de configuración y 'puerto' es una clave en la sección 'DB').
fuente
Debajo de 2 líneas de código se muestra cómo usar Python List Comprehension para cargar el archivo de propiedades 'java style'.
Eche un vistazo a la publicación a continuación para obtener detalles https://ilearnonlinesite.wordpress.com/2017/07/24/reading-property-file-in-python-using-comprehension-and-generators/
fuente
puede usar el parámetro "fromfile_prefix_chars" con argparse para leer desde el archivo de configuración como se muestra a continuación ---
temp.py
archivo de configuración
Ejecutar comando
fuente
Hice esto usando ConfigParser de la siguiente manera. El código asume que hay un archivo llamado config.prop en el mismo directorio donde se ubica BaseTest:
config.prop
BaseTest.py:
fuente
Esto es lo que había escrito para analizar el archivo y configurarlo como variables env que omite los comentarios y las líneas de valor no clave agregaron interruptores para especificar hg: d
y especifique el archivo de propiedades que debe analizarse, por ejemplo: python EnvParamSet.py -c # -s = env.properties
fuente
Lightbend ha lanzado la biblioteca de configuración Typesafe , que analiza los archivos de propiedades y también algunas extensiones basadas en JSON. La biblioteca de Lightbend es solo para JVM, pero parece ser ampliamente adoptada y ahora hay puertos en muchos idiomas, incluido Python: https://github.com/chimpler/pyhocon
fuente
Puede usar la siguiente función, que es el código modificado de @mvallebr. Respeta los comentarios del archivo de propiedades, ignora las nuevas líneas vacías y permite recuperar un solo valor clave.
fuente
esto funciona para mi
fuente
Seguí el enfoque de configparser y funcionó bastante bien para mí. Creé un archivo PropertyReader y usé el analizador de configuración allí para preparar la propiedad correspondiente a cada sección.
** Utiliza Python 2.7
Contenido del archivo PropertyReader.py:
Contenido del archivo de esquema de lectura:
Contenido del archivo .properties:
fuente
cree un diccionario en su módulo python y almacene todo en él y acceda a él, por ejemplo:
Ahora para acceder a él simplemente puede hacer:
fuente