Liste mit Listen in Datei schreiben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Dirki
User
Beiträge: 69
Registriert: Donnerstag 23. Juni 2016, 16:11

Hallo ihr unermüdlichen und fleißigen Python-Experten! :)

Ich habe mal wieder eine Anfänger-Frage.

In meinen Skript, welches ich benutze um meine Python-Kenntnisse zu erlernen, habe ich eine Liste mit Listen (danke, das ich durch euch weiß was das ist).
Diese habe ich bisher fest in den Code geschrieben, allerdings würde ich die gerne in das Home-Verzeichnis des Linux-Benutzers auslagern und von dort aus importieren.

Beim Start soll das Skript überprüfen, ob die Datei vorhanden ist, und wenn nicht, diese erstellen. Ersteres ist kein Problem, aber beim zweiten Punkt habe ich noch keinen Ansatz wie ich das angehen soll. Ich weiß auch nicht genau, wonach ich suchen soll. Ich denke mal writelines() ist das Mittel der Wahl.

Gibt es irgendwie eine Möglichkeit das folgende als Block zu schreiben, oder müsste ich das Zeilenweise umsetzen? Vermutlich muss ich noch die Anführungszeichen etc. ausquoten?

Hier den Text den ich in die Datei schreiben möchte:

Code: Alles auswählen

SERVERS = (
    ("Server1", "Server1.tld", 4444),
    ("Server-lokal", "server", 22),
    ("Server-extern", "server.selfhost.eu", 32)
)
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

Was du beschreibst, könnte man "händisch" zum Beispiel so lösen:

Code: Alles auswählen

SERVERS = (
    ("Server1", "Server1.tld", 4444),
    ("Server-lokal", "server", 22),
    ("Server-extern", "server.selfhost.eu", 32)
    )

with open('output.txt', 'w') as fh:
    for server in SERVERS:
        print('\t'.join(map(str, server)), file=fh)
Allerdings wäre je nach Ausgabeformat zu überlegen, ob du nicht auf eine existierende Bibliothek zurückgreifen möchtest.
Benutzeravatar
Dirki
User
Beiträge: 69
Registriert: Donnerstag 23. Juni 2016, 16:11

Huhu und danke schon mal für deine Antwort.
Ich habe mich glaube ich mal wieder ungünstig ausgedrückt.
Ich brauche in der Datei genau diese Ausgabe wie sie in der Codebox steht, nicht den Inhalt der Liste. Sorry, das ich mich falsch ausgedrückt habe. :(
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Dirki: nein, Dirki, das brauchst Du nicht. Am besten suchst Du Dir ein schon existierendes Format aus: JSON, INI, YAML, etc. Wenn die Datei nicht existiert, würde ich mit einer Fehlermeldung abbrechen. Eine Installationsanweisung zu schreiben, eventuell eine Beispielkonfigurationsdatei, reicht völlig. Es ist ja nicht die Aufgabe Deines Programms, die Konfiguration zu schreiben, sondern nur zu lesen.
Benutzeravatar
Dirki
User
Beiträge: 69
Registriert: Donnerstag 23. Juni 2016, 16:11

An diese Lösung habe ich auch schon gedacht. ;)

Eigentlich sollte man es Linux-Admins zutrauen, sich eine Datei in seinem Heimatverzeichnis zu kopieren. :D

Sollte sich keine bessere Lösung bieten, werde ich das wohl auch so machen. ;)
Benutzeravatar
Dirki
User
Beiträge: 69
Registriert: Donnerstag 23. Juni 2016, 16:11

Moin nochmal!

gibt es eine Möglichkeit die Liste in eine Datei zu speichern und zu benutzen als ob sie im Code steht? OK, die Frage ist blöd gestellt. Die Frage heißt eigentlich wie kann ich das realisieren, das ich die Datei als versteckte Datei. z. B. .server im Homeverzeichnis ablege und dann auf die Liste SERVER zugreife? Ich habe schon einiges hn- und herprobiert, aber irgendwie will mir das nicht gelingen. eigentlich habe ich gedacht ich kann die Datei ablegen und "einfach" mit import importieren, aber der meckert dann den . im Dateinamen an. Unglaublich, wie einen die "Kleinigkeiten" aufhalten können.

Danke nochmal für eure Hilfe, ohne euch wäre ich längst komplett verzweifelt. ;)

Viele Grüße

Dirk
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Am besten suchst Du Dir ein schon existierendes Format für Konfigurationsdateien aus: JSON, INI, YAML, etc.; speicherst die Konfiguration in diesem Format und benutzt eine Bibliothek, die dieses Format lesen kann. Python-Module sind kein Ersatz für Konfigurationsdateien.
Benutzeravatar
Dirki
User
Beiträge: 69
Registriert: Donnerstag 23. Juni 2016, 16:11

Danke Sirius für deine Antwort! :)

Allerdings fehlen mir da wohl noch einfach ein paar Hintergründe.

OK...

Es gibt wohl keine einfache Lösung, ausser die, das Skript einfach komplett ins Homeverzeichnis legen, darin die Server speichern, und gut. Das Feintuning kommt dann, wenn ich die Antwort verstanden habe. ;)
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Woran hapert es denn konkret? Verstehst du das Konzept Konfigurationsdatei?
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Benutzeravatar
Dirki
User
Beiträge: 69
Registriert: Donnerstag 23. Juni 2016, 16:11

Als Linux-Admin a.D. kenne ich das Konzept von Konfigurationsdateien ziemlich gut. :D

Eigentlich möchte ich nur diese Liste manuell in eine Datei schreiben, bzw meinem Skript beilegen, diese in dem Home-Verzeichnis ablegen und exakt so wieder einlesen, damit ich mit der Liste arbeiten kann.

Daran hapert es, da ich Python-Neuling bin und irgendwie keine Idee habe, wie ich das umsetzen soll. Vermutlich ist es recht banal, aber irgendwie finde ich trotzdem den Dreh nicht. :K
BlackJack

@Dirki: Konfigurationsdateien sind selten in der Programmiersprache verfasst in der sie verwendet werden. Sofern man eine richtige Programmierprache verwendet und nicht Shell-Skripte. Deshalb willst Du keine Python-Liste in der Konfigurationsdatei speichern, sondern beispielsweise ein JSON-Array in einer JSON-Datei. Und die dann mit dem `json`-Modul laden und das dann in Deinem Programm verwenden.
Benutzeravatar
Dirki
User
Beiträge: 69
Registriert: Donnerstag 23. Juni 2016, 16:11

Danke für die Antworten!

Mal sehne, ob mich das was weiterbringt, werde dann mal sehne, ob ich so was in meinen Büchern nachlesen kann, ansonsten mal suchen, danke auf jeden Fall! :)

Viele Grüße!

Dirk
BlackJack

@Dirki: Man könnte auch in der Dokumentation zum `json`-Modul nachlesen. Und eventuell den Links zur JSON-Website/-Spezifikation folgen.
Antworten