Aktualny plik konfiguracyjny wygląda następująco:
mainwindow.title = 'test'
mainwindow.position.x = 100
mainwindow.position.y = 200
mainwindow.button.label = 'apply'
mainwindow.button.size.x = 100
mainwindow.button.size.y = 30
logger.datarate = 100
logger.enable = True
logger.filename = './test.log'
Jest to odczytywane z pythonem do zagnieżdżonego słownika:
{
'mainwindow':{
'button':{
'label': {'value':'apply'},
...
},
'logger':{
datarate: {'value': 100},
enable: {'value': True},
filename: {'value': './test.log'}
},
...
}
Czy jest na to lepszy sposób? Chodzi o to, aby uzyskać zachowanie typu XML i unikać XML tak długo, jak to możliwe. Zakłada się, że użytkownik końcowy jest prawie całkowicie niepiśmienny i zasadniczo używa notatnika i kopiuj-wklej. Dlatego standardowy typ „nagłówka + zmiennych” w języku Python jest uważany za zbyt trudny.
Fikcyjny użytkownik edytuje plik konfiguracyjny, zdolni programiści obsługują słowniki. Słownik zagnieżdżony został wybrany w celu łatwego podziału (program rejestrujący nie potrzebuje, a nawet nie może mieć / edytować parametrów okna głównego).
Do what I want.
Najtrudniejszy dla komputerów: Pmainwindow.title =='test"
Odpowiedzi:
Możesz użyć czegoś takiego jak YAML . Oto link do przykładu:
http://www.yaml.org/start.html
Powiązania Pythona można znaleźć w PyYAML . Jest trochę bardziej przyjazny dla użytkownika niż JSON (tak wygląda twój drugi przykład).
źródło
>
POcomments:
, a&
i*
przedid001
Najlepszą rzeczą, jaką możesz zrobić, to wykonać makietę swojego rozwiązania, a być może makietę kilku innych rozwiązań i poprosić dwóch lub trzech reprezentatywnych użytkowników twojego systemu. Będą dużo lepiej mówić ci, co lubią, niż osoby wybrane przez siebie, które odpowiadają na pytania na tej stronie.
Biorąc to pod uwagę, myślę, że dla użytkowników „w zasadzie analfabetów komputerowych” format, który wyświetlasz w pytaniu, jest prawdopodobnie najlepszym formatem zwykłego tekstu. Jeśli naprawdę są niepiśmienni, możesz rozważyć prosty GUI, aby nie musieli ręcznie edytować plików konfiguracyjnych.
źródło
Strać wszystko, co możesz stracić.
name.name.name=value
, każda w osobnej linii, jest tak prosta, jak to tylko możliwe. Nie potrzebujesz cudzysłowów do parsowania, wiesz, kiedytrue
to boolean, a kiedytrue
ciąg znaków, nie zmuszaj „głupiego człowieka”, żeby ci to powiedział. W przypadku łańcuchów, jeśli pole nie powinno mieć początkowych / końcowych spacji, usuń je sam.źródło
Wyobraź sobie Chińczyka, który nie zna angielskiego, który próbuje odczytać plik konfiguracyjny. Alternatywnie, wyobraź sobie, że plik konfiguracyjny jest w języku arabskim (i że nie znasz arabskiego). Teraz zadaj sobie pytanie, czy to naprawdę czytelne dla człowieka?
Nawet jeśli czytelnik zna angielski, nadal nie ma pojęcia, czy „logger.datarate = 100” oznacza 100 znaków na sekundę, 100 GiB na godzinę lub 100 kurczaków na tonę metryczną.
Najbardziej czytelnym dla człowieka formatem pliku jest plik binarny z przyzwoitym oknem dialogowym / kreatorem / konfiguratorem opartym na GUI (z internacjonalizacją, systemem pomocy itp.).
źródło
Jestem z Patrickiem Hughes. Zbuduj prostą aplikację do edycji konfiguracji. Sam plik konfiguracyjny może być nieco bardziej złożony i może zawierać atrybuty do użycia przez edytor (nazwa wyświetlana, tekst pomocy, typ wartości, wartość min./maks. Itp.).
źródło
Mówię, że to, co masz (plik właściwości) jest już najlepszym formatem konfiguracji czytelnym dla człowieka. :)
Oto moje argumenty:
Ten ostatni punkt jest właściwie bardzo ważny. Biorąc pod uwagę, że obecnie wszystkie projekty są podzielone na gałęzie, plik konfiguracyjny może powodować mnóstwo bólu podczas łączenia gałęzi. Płaski format pliku, taki jak plik właściwości, jest łatwiejszy do scalenia niż plik struktury drzewa.
źródło