ubuntuusers.de

Wie Konfigurationen speichern? (Python)

Status: Gelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

E.C.

Anmeldungsdatum:
5. April 2010

Beiträge: 98

Moin,

ich wollte mal allgemein eure Meinung hören, da ich ein bisschen gespaltener Meinung bin.

Es geht um folgendes: Ich schreibe gerade ein kleines Programm und möchte natürlich nun die default-Konfiguration durch den Benutzer erlauben, jeder hat ja seine eigenen Vorlieben.

Bis jetzt habe ich im Programm als Schnittstelle zum User keine Parameter sondern ein kleines Frage-Antwort-Spiel ohne GUI (GUI baue ich vielleicht später) wo halt alles nacheinander abgefragt wird, auf Dauer ist soetwas doch für jeden Benutzer anstrengend.... Daher die Konfigurationsdateien.

Nun meine konkrete Frage: Was würdet ihr bei einem eher kleineren Optionsumfang machen:

- Konfigurations-Dateien im Textformat,
die man einfach in einem Texteditor bearbeiten kann? Für den Nutzer wäre halt der Vorteil, dass er schnell mal gedit/kate/nano/was weiß ich aufmachen kann und dann da die Konfigurationen ändern kann. Ich hätte als Programmierer einen etwas größeren Programmieraufwand in Sachen Parsen als bei Möglichkeit Nummer 2,

-ConfigParser
Ich als Programmierer hätte weniger Aufwand die Konfiguration zu lesen, müsste aber halt alle Einstellungen über die Kommandozeilenoberfläche abfragen lassen und der Benutzer könnte nicht quick and dirty das Zeug von Hand editieren. Andererseits wäre diese Form später bei der noch nicht sicheren GUI IMHO wieder besser, da man da bequem Häkchen & Co. machen kann.

Was also verwenden? Bin auf eure Antworten gespannt!

Lg E.C.

trick17

Avatar von trick17

Anmeldungsdatum:
17. Dezember 2008

Beiträge: 201

Hallo E.C.

E.C. schrieb:

-ConfigParser
... und der Benutzer könnte nicht quick and dirty das Zeug von Hand editieren.

Wieso sollte der Benutzer die .cfg-Datei nicht genauso wie eine .txt im Texteditor öffnen können?

Gruß

Pa_trick17

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7782

Manche Python-Programme arbeiten da ja mit pickle, das ist dann wirklich nicht mehr schön zum editieren.

Aber ConfigParser ist doch okay? Für einfache Einstellungen, reicht das allemal.

Interessant wird es wenn das Programm die Konfigurationsdatei auch selbst verändern können will. Das kann ConfigParser zwar auch. Aber da fehlt dann entsprechende Kommentar und Dokumentation im Config-File.

Yoschi

Anmeldungsdatum:
11. April 2009

Beiträge: 454

Config Dateien sind auch nicht schwer zu parsen ... Wenn du alles hinter einem "#" als Kommentar ansehen willst, jede Einstellung ihre eigene Zeile bekommt und die Zeilen in der Form "SCHLÜSSEL = WERT" sind, machst du folgendes:

  • In Zeilen splitten

  • Beim ersten "#" splitten, nur den ersten Teil weiterverwenden, wenn er nicht leer ist

  • Beim = splitten und Leerzeichen in den Teilen vorne und hinten entfernen

Am Ende hast du fertige Schlüssel- und Wertepaare und für alles gibts fertige Funktionen ( split und strip ).

Deine Konfig ließt du beim Start in eine Klasse oder ein Directory (Assoziatives Array) ein, da kannst du dann verändern was du willst, und am Programmende schreibst du alles wieder zurück, was genauso einfach ist. Dabei kannst du ja, wenn du es umständlicher machst und nicht einfach mit ner Schleife, auch Kommentare an den richtigen Stellen einfügen.

Pickle ist natürlich noch einfacher, aber fast uneditierbar.

Yoschi

edit: Wenn du die Kommentare des Benutzers behalten willst, kannst du sie zum Beispiel zusammen mit dem Wertepaar darunter speichern + den Kommentar ganz unten und sie beim zurückschreiben wieder mitausgeben. Kleine Positionsänderungen muss der Benutzer halt dann verzeihen. Andere Möglickeit ist über Regexp's, bei denen du dann aber aufpassen musst, dass man nicht mit bestimmten Kommentaren die Werte an die falschen Stellen schreibt.

E.C.

(Themenstarter)

Anmeldungsdatum:
5. April 2010

Beiträge: 98

@trick: Naja aber für den DAU ist eine normale Textdatei doch wohl noch besser zu verstehen als denke ich eine Datei von ConfigParser, oder?

@frsotschutz: Wenn ich ConfigParser nehme, würde ich die Routinen zur Sicherung der Einstellungen in das Programm einbauen. Dann müsste da niemand mehr rumpfuschen der sich da nicht wirklich auskennt.

@Yoschi:OK Danke für den Tipp wie das geht! Also Kommentare für den Benutzer würde dann wohl eh bloß ich schreiben damit man sich auskennt, aber ich denke es ist das beste, wenn ich das über ConfigParser mache =) Danke für eure Tipps und Anregungen!

Lysander

Avatar von Lysander

Anmeldungsdatum:
30. Juli 2008

Beiträge: 2669

Wohnort: Hamburg

@Yoschi Wieso sollte man sich seinen eigenen ConfigParser schreiben wollen? Nur wegen der Kommentare?

@E.C. Wo liegt denn Dein Problem mit dem ConfigParser Modul? Letztlich muss ein Benutzer, der etwas von Hand anlegt sich immer an eine gegebene Syntax halten. INI-Dateien sind da wirklich sehr einfach gehalten und dürften vielen sogar ein Begriff sein.

Alternativ würde ich wenn noch zu JSON raten - pickle erzeugt binäre Dateien und disqualifiziert sich somit selbst bei der Anforderung, per Textdatei editierbar zu sein.

Panke

Anmeldungsdatum:
14. Oktober 2010

Beiträge: 133

Was ist mit Python selbst? So wie ipython das zum Beispiel macht?

Wenn die Anforderungen komplexer werden, hat man so eventuell einen Vorteil. Wenn nicht ist Python auch nicht schwieriger zu lesen und schreiben als JSON, INI oder S-Ausdrücke.

E.C.

(Themenstarter)

Anmeldungsdatum:
5. April 2010

Beiträge: 98

Naja man sollte vielleicht bedenken, dass es DAU-kompatibel sein soll. Und jemanden der keinen Unterschied zwischen "Firefox" und "Internet" kennt ("Ist doch das selbe") zu sagen "Hey, mach mal die Datei xy auf, geh zu Zeile 25 und mach aus True ein False" kommt als erstes "Wie macht man das in Word auf?". Daher sollte doch die komplexität so gering wie möglich sein, und in diesem Hinblick ist wohl ConfigParser doch das beste.

snafu1

Avatar von snafu1

Anmeldungsdatum:
5. September 2007

Beiträge: 2133

Wohnort: Gelsenkirchen

Ein DAU wird höchstwahrscheinlich überhaupt nichts konfigurationsmäßig anfassen, solange keine Häkchen gesetzt werden können. Und selbst bei letzterem würde das schon ein eher fortgeschrittener DAU sein. Im Übrigen ist doch gerade das von dir erwähnte Setzen eines boolschen Wertes eine wesentliche Art von Einstellung. Also wenn du schon sowas vermeiden willst, dann frage ich mich, ob noch soviel übrig bleiben wird. Okay, Zahlenwerte und Zeichenketten natürlich, aber irgendwie klingt dein Vorhaben merkwürdig für mich.

E.C.

(Themenstarter)

Anmeldungsdatum:
5. April 2010

Beiträge: 98

Ich habe jetzt beschlossen, dass ich das alles über das Interface machen lasse, dann habe ich meine Ruhe und bin größtenteils "DAU-kompatibel". Sollen sie ihre Häkchen bekommen 😉

Lg E.C.

snafu1

Avatar von snafu1

Anmeldungsdatum:
5. September 2007

Beiträge: 2133

Wohnort: Gelsenkirchen

Ob du jetzt die angeklickten Optionen auswertest oder die INI-Datei parsen lässt, macht doch eigentlich auch keinen so großen Unterschied mehr. Man findet doch recht häufig beide Formen nebeneinander für seine Programme. Also professioneller würde es IMHO schon aussehen.

E.C.

(Themenstarter)

Anmeldungsdatum:
5. April 2010

Beiträge: 98

Ich baue auf jeden Fall eine Routine zum Verändern der Optionen in das Programm ein. Wenn das jemand dann doch selber von Hand machen will, kann er dies dann bei ConfigParser soweit ich weiß auch noch tun.

Lysander

Avatar von Lysander

Anmeldungsdatum:
30. Juli 2008

Beiträge: 2669

Wohnort: Hamburg

Du musst hier stärker zwischen Backend und Frontend unterscheiden! Willst Du Einstellungen persistent gestalten, brauchst Du eben ein Format, mit welchem Du die Daten speichern kannst. Natürlich kann man ein Frontend basteln (z.B. über Dialoge in einer GUI), mit welchem nan die Einstellungen verändern kann. Das sind ja zwei unterschiedliche Konzepte, die sich nicht beißen 😉

Antworten |