Seite 1 von 1

Liste mit Listen in Datei schreiben

Verfasst: Sonntag 15. Januar 2017, 16:05
von Dirki
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)
)

Re: Liste mit Listen in Datei schreiben

Verfasst: Sonntag 15. Januar 2017, 16:37
von nezzcarth
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.

Re: Liste mit Listen in Datei schreiben

Verfasst: Sonntag 15. Januar 2017, 16:43
von Dirki
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. :(

Re: Liste mit Listen in Datei schreiben

Verfasst: Sonntag 15. Januar 2017, 17:10
von Sirius3
@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.

Re: Liste mit Listen in Datei schreiben

Verfasst: Sonntag 15. Januar 2017, 17:20
von Dirki
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. ;)

Re: Liste mit Listen in Datei schreiben

Verfasst: Mittwoch 18. Januar 2017, 20:44
von Dirki
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

Re: Liste mit Listen in Datei schreiben

Verfasst: Mittwoch 18. Januar 2017, 21:05
von Sirius3
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.

Re: Liste mit Listen in Datei schreiben

Verfasst: Mittwoch 18. Januar 2017, 22:02
von Dirki
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. ;)

Re: Liste mit Listen in Datei schreiben

Verfasst: Donnerstag 19. Januar 2017, 11:22
von Kebap
Woran hapert es denn konkret? Verstehst du das Konzept Konfigurationsdatei?

Re: Liste mit Listen in Datei schreiben

Verfasst: Donnerstag 19. Januar 2017, 12:29
von Dirki
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

Re: Liste mit Listen in Datei schreiben

Verfasst: Donnerstag 19. Januar 2017, 12:54
von 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.

Re: Liste mit Listen in Datei schreiben

Verfasst: Donnerstag 19. Januar 2017, 17:41
von Dirki
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

Re: Liste mit Listen in Datei schreiben

Verfasst: Donnerstag 19. Januar 2017, 17:56
von BlackJack
@Dirki: Man könnte auch in der Dokumentation zum `json`-Modul nachlesen. Und eventuell den Links zur JSON-Website/-Spezifikation folgen.