Mam skrypt wiersza polecenia, który uruchamiam z wieloma argumentami. Doszedłem do momentu, w którym mam zbyt wiele argumentów i chcę też mieć kilka argumentów w formie słownika.
Aby uprościć rzeczy, chciałbym zamiast tego uruchomić skrypt z plikiem ustawień. Naprawdę nie wiem, jakich bibliotek użyć do parsowania pliku. Jaka jest najlepsza praktyka w tym zakresie? Mógłbym oczywiście sam wykuć coś, ale jeśli jest na to trochę biblioteki, jestem cały w uszach.
Kilka „żądań”:
- Zamiast używać
pickle
chciałbym, aby był to prosty plik tekstowy, który można łatwo czytać i edytować. - Chcę mieć możliwość dodawania do niej danych przypominających słownik, tzn. Powinna być obsługiwana jakaś forma zagnieżdżania.
Uproszczony pseudo przykładowy plik:
truck:
color: blue
brand: ford
city: new york
cabriolet:
color: black
engine:
cylinders: 8
placement: mid
doors: 2
Odpowiedzi:
Możesz mieć zwykły moduł Python, powiedz config.py, w następujący sposób:
i użyj tego w ten sposób:
źródło
.py
pliki są wykonywalne, więc każdy rodzaj kodu może zostać uruchomiony podczas próby załadowania konfiguracjiimport
. Jest to niedopuszczalne z punktu widzenia bezpieczeństwa.ast.literal_eval
? docs.python.org/3/library/ast.html#ast.literal_evalPodana przykładowa konfiguracja jest w rzeczywistości poprawna YAML . W rzeczywistości YAML spełnia wszystkie Twoje wymagania, jest wdrożony w wielu językach i jest wyjątkowo przyjazny dla człowieka. Gorąco polecam korzystanie z niego. Projekt PyYAML zapewnia ładny moduł Pythona, który implementuje YAML.
Korzystanie z modułu yaml jest niezwykle proste:
źródło
pip3 install pyyaml
to przygotowanie go do zaimportowania do skryptów Pythona.Znalazłem to najbardziej przydatne i łatwe w użyciu https://wiki.python.org/moin/ConfigParserExamples
Po prostu tworzysz plik „myfile.ini”, taki jak:
I pobierz dane, takie jak:
źródło
Yaml i Json to najprostsze i najczęściej używane formaty plików do przechowywania ustawień / konfiguracji. PyYaml może być użyty do parsowania yaml. Json jest już częścią Pythona od wersji 2.5. Yaml jest nadzbiorem Jsona. Json rozwiąże większość przypadków użycia, z wyjątkiem ciągów wieloliniowych, w których wymagane jest stosowanie znaku ucieczki. Yaml zajmuje się także tymi przypadkami.
źródło