Bei folgendem Format ( .properties oder .ini ):
propertyName1=propertyValue1
propertyName2=propertyValue2
...
propertyNameN=propertyValueN
Für Java gibt es die Properties- Klasse, die Funktionen zum Parsen / Interagieren mit dem obigen Format bietet.
Gibt es etwas ähnliches in Python ‚s Standard - Bibliothek (2.x)?
Wenn nicht, welche anderen Alternativen habe ich?
python
properties
Andrei Ciobanu
quelle
quelle
Antworten:
Für INI-Dateien gibt es die ConfigParser- Modul, das ein mit INI-Dateien kompatibles Format bereitstellt.
Auf jeden Fall ist nichts zum Parsen vollständiger .properties-Dateien verfügbar. Wenn ich das tun muss, verwende ich einfach Jython (ich spreche von Skripten).
quelle
Ich konnte dies zum Laufen bringen
ConfigParser
, niemand zeigte Beispiele dafür, also hier ein einfacher Python-Reader einer Eigenschaftendatei und ein Beispiel der Eigenschaftendatei. Beachten Sie, dass die Erweiterung immer noch vorhanden ist.properties
, aber ich musste einen Abschnittsheader hinzufügen, der dem ähnelt, was Sie in INI-Dateien sehen ... ein bisschen bastardisiert, aber es funktioniert.Die Python-Datei:
PythonPropertyReader.py
Die Eigenschaftendatei:
ConfigFile.properties
Weitere Funktionen finden Sie unter: https://docs.python.org/2/library/configparser.html
quelle
Eine Java-Eigenschaftendatei ist häufig auch ein gültiger Python-Code. Sie können Ihre Datei myconfig.properties in myconfig.py umbenennen. Dann importieren Sie einfach Ihre Datei wie folgt
und greifen Sie direkt auf die Eigenschaften zu
quelle
prop.name="val"
wird in diesem Fall nicht funktionieren.A java properties file is valid python code
: Ich muss mich unterscheiden. Einige Java-Eigenschaftendateien werden als gültiger Python-Code übergeben, aber sicherlich nicht alle. Wie @mmjj sagte, sind Punkte ein Problem. So sind nicht zitierte wörtliche Zeichenfolgen. -1.Ich weiß, dass dies eine sehr alte Frage ist, aber ich brauche sie gerade und habe beschlossen, meine eigene Lösung zu implementieren, eine reine Python-Lösung, die die meisten Anwendungsfälle abdeckt (nicht alle):
Sie können das
sep
in ':' ändern , um Dateien mit folgendem Format zu analysieren:Der Code analysiert Zeilen wie folgt korrekt:
Sie erhalten ein Diktat mit:
quelle
foo = "bar" # bat
.foo
mit Wert"bar" # bat
.l = line.strip()
zul = line.split(comment_char)[0].strip()
und dann nur prüfen , obl
ein Wert eher auf der nachfolgenden Zeile mitif l:
.Wenn Sie eine Option für Dateiformate haben, empfehle ich die Verwendung von .ini und Pythons ConfigParser wie erwähnt. Wenn Sie Kompatibilität mit Java .properties-Dateien benötigen, habe ich eine Bibliothek namens jprops dafür geschrieben . Wir haben Pyjavaproperties verwendet, aber nachdem ich auf verschiedene Einschränkungen gestoßen war, habe ich meine eigenen implementiert. Es bietet volle Unterstützung für das .properties-Format, einschließlich Unicode-Unterstützung und besserer Unterstützung für Escape-Sequenzen. Jprops kann auch jedes dateiähnliche Objekt analysieren, während pyjavaproperties nur mit echten Dateien auf der Festplatte funktioniert.
quelle
Wenn Sie keine mehrzeiligen Eigenschaften und einen sehr einfachen Bedarf haben, können einige Codezeilen dies für Sie lösen:
Datei
t.properties
:Python-Code:
quelle
Dies sind nicht gerade Eigenschaften, aber Python verfügt über eine schöne Bibliothek zum Parsen von Konfigurationsdateien. Siehe auch dieses Rezept: Ein Python-Ersatz für java.util.Properties .
quelle
Hier ist ein Link zu meinem Projekt: https://sourceforge.net/projects/pyproperties/ . Es ist eine Bibliothek mit Methoden zum Arbeiten mit * .properties-Dateien für Python 3.x.
Es basiert jedoch nicht auf java.util.Properties
quelle
Dies ist eine Eins-zu-Eins-Ersetzung von java.util.Propeties
Aus dem Dokument:
quelle
Sie können ein dateiähnliches Objekt verwenden,
ConfigParser.RawConfigParser.readfp
das hier definiert ist -> https://docs.python.org/2/library/configparser.html#ConfigParser.RawConfigParser.readfpDefinieren Sie eine Klasse, die überschreibt
readline
einen Abschnittsnamen vor dem eigentlichen Inhalt Ihrer Eigenschaftendatei hinzufügt.Ich habe es in die Klasse gepackt, die eine
dict
der definierten Eigenschaften zurückgibt .quelle
Ich habe dies verwendet, diese Bibliothek ist sehr nützlich
quelle
Dies ist, was ich in meinem Projekt mache: Ich erstelle einfach eine andere .py-Datei namens properties.py, die alle allgemeinen Variablen / Eigenschaften enthält, die ich im Projekt verwendet habe, und in jeder Datei muss auf diese Variablen verwiesen werden
Verwendete diese Methode, um svn-Frieden zu bewahren, wenn ich häufig die Entwicklungsstandorte wechselte und einige allgemeine Variablen relativ zur lokalen Umgebung waren. Funktioniert gut für mich, ist sich aber nicht sicher, ob diese Methode für formale Entwicklungsumgebungen usw. vorgeschlagen wird.
quelle
Inhalt von test.json: {"host": "127.0.0.1", "user": "jms"}
quelle
Ich habe ein Python-Modul erstellt, das der Properties-Klasse von Java fast ähnlich ist (tatsächlich ähnelt es dem PropertyPlaceholderConfigurer im Frühjahr, mit dem Sie $ {variable-reference} verwenden können, um auf bereits definierte Eigenschaften zu verweisen).
BEARBEITEN: Sie können dieses Paket installieren, indem Sie den Befehl ausführen (derzeit für Python 3 getestet).
pip install property
Das Projekt wird am gehostet GitHub gehostet
Beispiel: (Detaillierte Dokumentation finden Sie hier )
Angenommen, Sie haben die folgenden Eigenschaften in der Datei my_file.properties definiert
Code zum Laden der oben genannten Eigenschaften
quelle
Wenn Sie alle Werte aus einem Abschnitt in der Eigenschaftendatei auf einfache Weise lesen müssen:
Ihr
config.properties
Dateilayout:Sie codieren:
Dadurch erhalten Sie ein Wörterbuch, in dem die Schlüssel mit den Konfigurationsdateien und den entsprechenden Werten identisch sind.
details_dict
ist:Um nun den Wert von key1 zu erhalten:
details_dict['key1']
Fügen Sie alles in eine Methode ein, die diesen Abschnitt nur einmal aus der Konfigurationsdatei liest (das erste Mal, wenn die Methode während eines Programmlaufs aufgerufen wird).
Rufen Sie nun die obige Funktion auf und erhalten Sie den Wert des gewünschten Schlüssels:
-------------------------------------------------- -----------
Erweitern Sie den oben genannten Ansatz, lesen Sie Abschnitt für Abschnitt automatisch und greifen Sie dann auf den Abschnittsnamen gefolgt vom Schlüsselnamen zu.
Zugreifen:
(Hier ist 'DB' ein Abschnittsname in der Konfigurationsdatei und 'Port' ist ein Schlüssel unter Abschnitt 'DB'.)
quelle
Die folgenden 2 Codezeilen zeigen, wie Sie mit Python List Comprehension die Eigenschaftendatei 'Java Style' laden.
Weitere Informationen finden Sie im folgenden Beitrag. Https://ilearnonlinesite.wordpress.com/2017/07/24/reading-property-file-in-python-using-comprehension-and-generators/
quelle
Sie können den Parameter "fromfile_prefix_chars" mit argparse verwenden, um wie folgt aus der Konfigurationsdatei zu lesen ---
temp.py.
Konfigurationsdatei
Führen Sie den Befehl aus
quelle
Ich habe dies mit ConfigParser wie folgt gemacht. Der Code setzt voraus, dass sich eine Datei mit dem Namen config.prop in demselben Verzeichnis befindet, in dem sich BaseTest befindet:
config.prop
BaseTest.py:
quelle
Dies ist, was ich geschrieben hatte, um die Datei zu analysieren und als env-Variablen festzulegen, die Kommentare überspringen und Schalter ohne Schlüsselwerte hinzufügen, um hg: d anzugeben
und geben Sie die Eigenschaftendatei an, die analysiert werden muss, z. B.: python EnvParamSet.py -c # -s = env.properties
quelle
Lightbend hat die Typesafe Config- Bibliothek veröffentlicht, die Eigenschaftendateien und einige JSON-basierte Erweiterungen analysiert. Die Bibliothek von Lightbend ist nur für die JVM gedacht, scheint jedoch weit verbreitet zu sein, und es gibt jetzt Ports in vielen Sprachen, einschließlich Python: https://github.com/chimpler/pyhocon
quelle
Sie können die folgende Funktion verwenden, bei der es sich um den geänderten Code von @mvallebr handelt. Es berücksichtigt die Kommentare der Eigenschaftendatei, ignoriert leere neue Zeilen und ermöglicht das Abrufen eines einzelnen Schlüsselwerts.
quelle
das funktioniert bei mir.
quelle
Ich folgte dem Configparser-Ansatz und es funktionierte ziemlich gut für mich. Erstellt eine PropertyReader-Datei und verwendet dort den Konfigurationsparser, um die Eigenschaft für jeden Abschnitt vorzubereiten.
** Verwendetes Python 2.7
Inhalt der PropertyReader.py-Datei:
Inhalt der gelesenen Schemadatei:
Inhalt der .properties-Datei:
quelle
Erstellen Sie ein Wörterbuch in Ihrem Python-Modul, speichern Sie alles darin und greifen Sie darauf zu, zum Beispiel:
Um darauf zuzugreifen, können Sie einfach Folgendes tun:
quelle