Biorąc pod uwagę następujący format ( .properties lub .ini ):
propertyName1=propertyValue1
propertyName2=propertyValue2
...
propertyNameN=propertyValueN
W przypadku języka Java istnieje klasa Właściwości, która oferuje funkcje analizowania / interakcji z powyższym formatem.
Czy jest coś podobnego w python „s standardowej biblioteki (2.x)?
Jeśli nie, jakie mam inne alternatywy?
python
properties
Andrei Ciobanu
źródło
źródło
Odpowiedzi:
W przypadku plików .ini istnieje moduł ConfigParser , który zapewnia format zgodny z plikami .ini.
W każdym razie nie ma nic do parsowania kompletnych plików .properties, kiedy muszę to zrobić, po prostu używam jythona (mówię o skryptach).
źródło
Udało mi się to wykorzystać
ConfigParser
, nikt nie pokazał żadnych przykładów, jak to zrobić, więc tutaj jest prosty czytnik Pythona pliku właściwości i przykład pliku właściwości. Zauważ, że rozszerzenie jest nadal.properties
, ale musiałem dodać nagłówek sekcji podobny do tego, co widzisz w plikach .ini ... trochę bastardyzacji, ale działa.Plik Pythona:
PythonPropertyReader.py
Plik nieruchomości:
ConfigFile.properties
Aby uzyskać więcej funkcji, przeczytaj: https://docs.python.org/2/library/configparser.html
źródło
Plik właściwości Java jest również często prawidłowym kodem w języku Python. Możesz zmienić nazwę pliku myconfig.properties na myconfig.py. Następnie po prostu zaimportuj plik, w ten sposób
i uzyskać bezpośredni dostęp do właściwości
źródło
prop.name="val"
Nie będzie działać w tym przypadku.A java properties file is valid python code
: Muszę się różnić. Niektóre pliki właściwości Java zostaną przekazane do prawidłowego kodu w języku Python, ale z pewnością nie wszystkie. Jak powiedział @mmjj, kropki są problemem. Tak samo jak niecytowane ciągi literałów. -1.Wiem, że to bardzo stare pytanie, ale potrzebuję go właśnie teraz i zdecydowałem się wdrożyć własne rozwiązanie, rozwiązanie w czystym Pythonie, które obejmuje większość przypadków użycia (nie wszystkie):
Możesz zmienić na
sep
„:”, aby analizować pliki w formacie:Kod poprawnie analizuje wiersze, takie jak:
Otrzymasz dyktando z:
źródło
foo = "bar" # bat
.foo
z wartością"bar" # bat
.l = line.strip()
na,l = line.split(comment_char)[0].strip()
a następnie sprawdzenie tylko, czyl
ma wartość, a w kolejnym wierszu zif l:
.Jeśli masz opcję formatów plików, sugeruję użycie .ini i ConfigParser Pythona, jak wspomniano. Jeśli potrzebujesz kompatybilności z plikami Java .properties, napisałem dla niego bibliotekę o nazwie jprops . Używaliśmy pyjavaproperties, ale po napotkaniu różnych ograniczeń zaimplementowałem własne. Ma pełne wsparcie dla formatu .properties, w tym obsługę Unicode i lepszą obsługę sekwencji ucieczki. Jprops może również analizować dowolny obiekt podobny do pliku, podczas gdy pyjavaproperties działa tylko z prawdziwymi plikami na dysku.
źródło
jeśli nie masz właściwości wielowierszowych i jest to bardzo prosta potrzeba, kilka wierszy kodu może rozwiązać ten problem:
Plik
t.properties
:Kod Pythona:
źródło
To nie są dokładnie właściwości, ale Python ma fajną bibliotekę do analizowania plików konfiguracyjnych. Zobacz także ten przepis: Zamiennik języka Python dla java.util.Properties .
źródło
Oto link do mojego projektu: https://sourceforge.net/projects/pyproperties/ . Jest to biblioteka zawierająca metody pracy z plikami * .properties dla języka Python 3.x.
Ale nie jest oparty na java.util.Properties
źródło
To jest wymiana jeden do jednego java.util.Propeties
Z dokumentu:
źródło
Możesz użyć obiektu podobnego do pliku w
ConfigParser.RawConfigParser.readfp
zdefiniowanym tutaj -> https://docs.python.org/2/library/configparser.html#ConfigParser.RawConfigParser.readfpZdefiniuj klasę, która nadpisuje,
readline
która dodaje nazwę sekcji przed rzeczywistą zawartością pliku właściwości.Umieściłem go w klasie, która zwraca a
dict
ze wszystkich zdefiniowanych właściwości.źródło
Użyłem tego, ta biblioteka jest bardzo przydatna
źródło
Oto, co robię w moim projekcie: po prostu tworzę kolejny plik .py o nazwie properties.py, który zawiera wszystkie typowe zmienne / właściwości, których użyłem w projekcie, aw każdym pliku muszę odwoływać się do tych zmiennych, umieszczam
Użyłem tej metody, aby zachować spokój svn, gdy często zmieniałem lokalizacje deweloperów, a niektóre typowe zmienne były dość zależne od lokalnego środowiska. Działa dobrze dla mnie, ale nie jestem pewien, czy ta metoda byłaby sugerowana dla formalnego środowiska programistycznego itp.
źródło
Zawartość pliku test.json: {"host": "127.0.0.1", "user": "jms"}
źródło
Stworzyłem moduł Pythona, który jest prawie podobny do klasy Właściwości w Javie (w rzeczywistości jest podobny do PropertyPlaceholderConfigurer wiosną, który pozwala używać $ {zmienna-referencja} do odwoływania się do już zdefiniowanej właściwości)
EDYCJA: Możesz zainstalować ten pakiet, uruchamiając polecenie (obecnie testowane pod kątem Pythona 3).
pip install property
Projekt jest hostowany na GitHub
Przykład: (szczegółową dokumentację można znaleźć tutaj )
Załóżmy, że masz zdefiniowane następujące właściwości w pliku my_file.properties
Kod do załadowania powyższych właściwości
źródło
Jeśli chcesz w prosty sposób odczytać wszystkie wartości z sekcji w pliku właściwości:
config.properties
Układ Twojego pliku:Kodujesz:
To da ci słownik, w którym klucze są takie same jak w pliku konfiguracyjnym i odpowiadające im wartości.
details_dict
jest :Teraz, aby uzyskać wartość klucza1:
details_dict['key1']
Umieszczenie tego wszystkiego w metodzie, która wczytuje tę sekcję z pliku konfiguracyjnego tylko raz (przy pierwszym wywołaniu metody podczas wykonywania programu).
Teraz wywołaj powyższą funkcję i uzyskaj wartość wymaganego klucza:
-------------------------------------------------- -----------
Rozszerzenie powyższego podejścia, automatyczne czytanie sekcji po sekcji, a następnie uzyskiwanie dostępu za pomocą nazwy sekcji, po której następuje nazwa klucza.
Mieć dostęp:
(tutaj „DB” to nazwa sekcji w pliku konfiguracyjnym, a „port” to klucz w sekcji „DB”).
źródło
Poniżej 2 wiersze kodu pokazują, jak używać funkcji rozumienia list w języku Python do ładowania pliku właściwości „styl java”.
Proszę spojrzeć na poniższy post, aby uzyskać szczegółowe informacje https://ilearnonlinesite.wordpress.com/2017/07/24/reading-property-file-in-python-using-comprehension-and-generators/
źródło
możesz użyć parametru "fromfile_prefix_chars" z argparse do odczytu z pliku konfiguracyjnego, jak poniżej ---
temp.py
plik konfiguracyjny
Uruchom polecenie
źródło
Zrobiłem to za pomocą ConfigParser w następujący sposób. Kod zakłada, że w tym samym katalogu, w którym znajduje się BaseTest, znajduje się plik o nazwie config.prop:
config.prop
BaseTest.py:
źródło
To jest to, co napisałem, aby przeanalizować plik i ustawić go jako zmienne env, które pomijają komentarze i dodano przełączniki nie zawierające wartości klucza, aby określić hg: d
i określ plik właściwości, który ma zostać przeanalizowany, np .: python EnvParamSet.py -c # -s = env.properties
źródło
Lightbend wydał bibliotekę Typesafe Config , która analizuje pliki właściwości, a także niektóre rozszerzenia oparte na JSON. Biblioteka Lightbend jest przeznaczona tylko dla JVM, ale wydaje się, że jest szeroko stosowana i obecnie istnieją porty w wielu językach, w tym w Pythonie: https://github.com/chimpler/pyhocon
źródło
Możesz użyć następującej funkcji, która jest zmodyfikowanym kodem @mvallebr. Szanuje komentarze do pliku właściwości, ignoruje puste nowe wiersze i umożliwia pobranie pojedynczej wartości klucza.
źródło
to działa dla mnie.
źródło
Podążyłem za podejściem configparser i zadziałało to całkiem dobrze. Utworzono jeden plik PropertyReader i użyłem tam parsera konfiguracji do gotowej właściwości odpowiadającej każdej sekcji.
** Użyto Pythona 2.7
Zawartość pliku PropertyReader.py:
Zawartość odczytanego pliku schematu:
Zawartość pliku .properties:
źródło
utwórz słownik w swoim module Pythona i zapisz wszystko w nim i uzyskaj do niego dostęp, na przykład:
Teraz, aby uzyskać do niego dostęp, możesz po prostu zrobić:
źródło