Compte tenu du format suivant ( .properties ou .ini ):
propertyName1=propertyValue1
propertyName2=propertyValue2
...
propertyNameN=propertyValueN
Pour Java, il existe la classe Properties qui offre des fonctionnalités pour analyser / interagir avec le format ci-dessus.
Y a-t-il quelque chose de similaire dans la bibliothèque standard de python (2.x)?
Sinon, quelles autres alternatives ai-je?
python
properties
Andrei Ciobanu
la source
la source
Réponses:
Pour les fichiers .ini, il existe le module ConfigParser qui fournit un format compatible avec les fichiers .ini.
Quoi qu'il en soit, il n'y a rien de disponible pour analyser des fichiers .properties complets, quand je dois le faire, j'utilise simplement jython (je parle de script).
la source
J'ai pu faire fonctionner cela
ConfigParser
, personne n'a montré d'exemples sur la façon de le faire, voici donc un simple lecteur python d'un fichier de propriétés et un exemple du fichier de propriétés. Notez que l'extension est toujours.properties
, mais j'ai dû ajouter un en-tête de section similaire à ce que vous voyez dans les fichiers .ini ... un peu une bâtardise, mais cela fonctionne.Le fichier python:
PythonPropertyReader.py
Le fichier de propriété:
ConfigFile.properties
Pour plus de fonctionnalités, lisez: https://docs.python.org/2/library/configparser.html
la source
Un fichier de propriétés Java est souvent également du code Python valide. Vous pouvez renommer votre fichier myconfig.properties en myconfig.py. Ensuite, importez simplement votre fichier, comme ceci
et accédez directement aux propriétés
la source
prop.name="val"
-à- dire ne fonctionnera pas dans ce cas.A java properties file is valid python code
: Je dois différer. Certains fichiers de propriétés Java passeront pour du code python valide, mais certainement pas tous. Comme @mmjj l'a dit, les points sont un problème. Il en va de même pour les chaînes littérales sans guillemets. -1.Je sais que c'est une question très ancienne, mais j'en ai besoin tout à l'heure et j'ai décidé d'implémenter ma propre solution, une solution pure python, qui couvre la plupart des cas d'utilisation (pas tous):
Vous pouvez changer le
sep
en «:» pour analyser les fichiers au format:Le code analyse correctement les lignes comme:
Vous obtiendrez un dict avec:
la source
foo = "bar" # bat
.foo
avec une valeur"bar" # bat
.l = line.strip()
pourl = line.split(comment_char)[0].strip()
et seulement vérifier sil
une valeur plutôt sur la ligne suivante avecif l:
.Si vous avez une option de formats de fichiers, je suggère d'utiliser .ini et ConfigParser de Python comme mentionné. Si vous avez besoin de compatibilité avec les fichiers Java .properties, j'ai écrit une bibliothèque appelée jprops . Nous utilisions pyjavaproperties, mais après avoir rencontré diverses limitations, j'ai fini par implémenter les miennes. Il prend entièrement en charge le format .properties, y compris le support Unicode et une meilleure prise en charge des séquences d'échappement. Jprops peut également analyser n'importe quel objet de type fichier tandis que pyjavaproperties ne fonctionne qu'avec de vrais fichiers sur le disque.
la source
si vous n'avez pas de propriétés multi-lignes et un besoin très simple, quelques lignes de code peuvent le résoudre pour vous:
Fichier
t.properties
:Code Python:
la source
Ce ne sont pas exactement des propriétés mais Python a une belle bibliothèque pour analyser les fichiers de configuration. Voir aussi cette recette: Un remplacement python pour java.util.Properties .
la source
Voici le lien vers mon projet: https://sourceforge.net/projects/pyproperties/ . C'est une bibliothèque avec des méthodes pour travailler avec des fichiers * .properties pour Python 3.x.
Mais il n'est pas basé sur java.util.Properties
la source
Ceci est un remplacement un-à-un de java.util.
Du doc:
la source
Vous pouvez utiliser un objet semblable à un fichier
ConfigParser.RawConfigParser.readfp
défini ici -> https://docs.python.org/2/library/configparser.html#ConfigParser.RawConfigParser.readfpDéfinissez une classe qui remplace
readline
et ajoute un nom de section avant le contenu réel de votre fichier de propriétés.Je l'ai empaqueté dans la classe qui renvoie une
dict
de toutes les propriétés définies.la source
j'ai utilisé ceci, cette bibliothèque est très utile
la source
C'est ce que je fais dans mon projet: je crée juste un autre fichier .py appelé properties.py qui comprend toutes les variables / propriétés courantes que j'ai utilisées dans le projet, et dans tout fichier, je dois faire référence à ces variables, mettez
J'ai utilisé cette méthode pour garder svn la paix lorsque je changeais fréquemment les emplacements de développement et que certaines variables communes étaient assez relatives à l'environnement local. Fonctionne bien pour moi mais je ne suis pas sûr que cette méthode soit suggérée pour un environnement de développement formel, etc.
la source
Contenu de test.json: {"host": "127.0.0.1", "user": "jms"}
la source
J'ai créé un module python qui est presque similaire à la classe Properties de Java (en fait, c'est comme le PropertyPlaceholderConfigurer au printemps qui vous permet d'utiliser $ {variable-reference} pour faire référence à une propriété déjà définie)
EDIT: Vous pouvez installer ce package en exécutant la commande (actuellement testée pour python 3).
pip install property
Le projet est hébergé sur GitHub
Exemple: (Une documentation détaillée peut être trouvée ici )
Supposons que vous ayez les propriétés suivantes définies dans le fichier my_file.properties
Code pour charger les propriétés ci-dessus
la source
Si vous avez besoin de lire toutes les valeurs d'une section dans le fichier de propriétés d'une manière simple:
La
config.properties
mise en page de votre fichier:Vous codez:
Cela vous donnera un dictionnaire où les clés sont les mêmes que dans le fichier de configuration et leurs valeurs correspondantes.
details_dict
est :Maintenant, pour obtenir la valeur de key1:
details_dict['key1']
Mettre le tout dans une méthode qui lit cette section à partir du fichier de configuration une seule fois (la première fois que la méthode est appelée pendant l'exécution d'un programme).
Appelez maintenant la fonction ci-dessus et obtenez la valeur de la clé requise:
-------------------------------------------------- -----------
Extension de l'approche mentionnée ci-dessus, lecture section par section automatiquement puis accès par nom de section suivi du nom de clé.
Accéder:
(ici 'DB' est un nom de section dans le fichier de configuration et 'port' est une clé sous la section 'DB'.)
la source
Ci-dessous 2 lignes de code montre comment utiliser Python List Comprehension pour charger le fichier de propriétés 'java style'.
Veuillez consulter l'article ci-dessous pour plus de détails https://ilearnonlinesite.wordpress.com/2017/07/24/reading-property-file-in-python-using-comprehension-and-generators/
la source
vous pouvez utiliser le paramètre "fromfile_prefix_chars" avec argparse pour lire à partir du fichier de configuration comme ci-dessous ---
temp.py
fichier de configuration
Exécuter la commande
la source
J'ai fait cela en utilisant ConfigParser comme suit. Le code suppose qu'il existe un fichier appelé config.prop dans le même répertoire où BaseTest est placé:
config.prop
BaseTest.py:
la source
C'est ce que j'avais écrit pour analyser le fichier et le définir comme des variables d'environnement qui ignorent les commentaires et les lignes de valeur non clés ajoutées des commutateurs pour spécifier hg: d
et spécifiez le fichier de propriétés qui doit être analysé, par exemple: python EnvParamSet.py -c # -s = env.properties
la source
Lightbend a publié la bibliothèque Typesafe Config , qui analyse les fichiers de propriétés ainsi que certaines extensions basées sur JSON. La bibliothèque de Lightbend est uniquement destinée à la JVM, mais elle semble être largement adoptée et il existe désormais des ports dans de nombreux langages, y compris Python: https://github.com/chimpler/pyhocon
la source
Vous pouvez utiliser la fonction suivante, qui est le code modifié de @mvallebr. Il respecte les commentaires du fichier de propriétés, ignore les nouvelles lignes vides et permet de récupérer une seule valeur de clé.
la source
cela fonctionne pour moi.
la source
J'ai suivi l'approche du configparser et cela a très bien fonctionné pour moi. Créé un fichier PropertyReader et utilisé l'analyseur de configuration pour préparer la propriété à correspondre à chaque section.
** Python 2.7 utilisé
Contenu du fichier PropertyReader.py:
Contenu du fichier de schéma lu:
Contenu du fichier .properties:
la source
créez un dictionnaire dans votre module python et stockez-y tout et accédez-y, par exemple:
Maintenant, pour y accéder, vous pouvez simplement faire:
la source