Liste in eine txt-Datei speichern

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
reddy
User
Beiträge: 21
Registriert: Donnerstag 17. März 2016, 23:29

Hallo liebe Comunity,

ich habe eine gute Frage. Wie kann man eine Liste in eine Text-Datei ohne rechteckige Klammern abspeichern?
Vielleicht bin ich doof, aber ich fange gerade an. :-)

Der Code sieht so aus:

datei = open("1.txt", "r+")
L = [1, 2, 3, 4, 5]
L = str(L)
datei.write(L)
datei.close()

Ich möchte, dass es in der Text-Datei so abgespeichert wird: 1, 2, 3, 4, 5.
Aber, ich bekomme immer so:
[1, 2, 3, 4, 5]

Ich bin schon am Verzweifeln...:-(
BlackJack

@reddy: Vergiss die Zeichenkettendarstellung von Listen und erstelle die Zeichenkette selbst. Es gibt da so eine praktische `join()`-Methode auf Zeichenketten. Eine Zahl kann man mit der `str()`-Funktion in eine Zeichenkette umwandeln. Dann brauchst Du nur noch eine Schleife um eine neue Liste mit Zeichenketten aus den Zahlen erstellen, oder eine „list comprehension“, oder einen Generatorausdruck, oder die `map()`-Funktion.

Wenn Du etwas in eine Datei schreiben möchtest, dann solltes Du die zum Schreiben öffnen. Nicht zum lesen und schreiben. 'r+' braucht man nur ganz selten, für Binärdaten, und wenn man genau weiss was man da tut.
reddy
User
Beiträge: 21
Registriert: Donnerstag 17. März 2016, 23:29

Hallo BlackJack,

Danke schön für die Antwort. Aber ich verstehe es immer noch nicht. :K
Kannst du bitte ein paar Zeilen Code schreiben?
BlackJack

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf8
from __future__ import absolute_import, division, print_function


def main():
    data = [1, 2, 3, 4, 5]
    with open('test.txt', 'w') as out_file:
        out_file.write('{0}\n'.format(', '.join(str(n) for n in data)))


if __name__ == '__main__':
    main()
reddy
User
Beiträge: 21
Registriert: Donnerstag 17. März 2016, 23:29

Ohje...:-)
Der Code funktioniert. Allerdings, muss ich jetzt eine Stunde sitzen, um zu verstehen, was da passiert.
Wie ich verstanden habe, muss man die Ausgabe in eine Datei einfach "brutal" formatieren? :D
Danke sehr!
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@reddy: hier muß man nichts brutal machen, sondern es ist der Normalfall, dass man die Ausgabe so formatieren muß, wie man sie gerne hätte. Wenn Du eigentlich eine Datei im csv-Format schreiben willst, böte es sich an, das csv-Modul dafür zu verwenden.
reddy
User
Beiträge: 21
Registriert: Donnerstag 17. März 2016, 23:29

Sirius3 hat geschrieben:@reddy: hier muß man nichts brutal machen, sondern es ist der Normalfall, dass man die Ausgabe so formatieren muß, wie man sie gerne hätte. Wenn Du eigentlich eine Datei im csv-Format schreiben willst, böte es sich an, das csv-Modul dafür zu verwenden.
Hallo Sirius3,
ja, csv scheint dafür besser geignet zu sein.
Wie kann man z.B. eine Liste in der Form [['Schulz', 'Steffi', 165], ['Bolz', 'Carina', 172]] in eine csv-Datei abspeichern?
BlackJack

@reddy: Erster Schritt: Dokumentation des csv-Moduls lesen und verstehen. Zweiter Schritt: Wissen in Code umsetzen.
reddy
User
Beiträge: 21
Registriert: Donnerstag 17. März 2016, 23:29

BlackJack hat geschrieben:@reddy: Erster Schritt: Dokumentation des csv-Moduls lesen und verstehen. Zweiter Schritt: Wissen in Code umsetzen.
Ok, ich nehme die Frage zurück. Ich habe schon die Lösung rausgegoogelt.
Nur noch eine Frage! :D
Ich habe jetzt CSV-Datei, die ich mit Excel öffnen kann.
Man kann natürlich jetzt die Daten im Excel sortieren.
Ich würde es aber bevorzugen, die Daten mit Python zu sortieren.
Nach welchen Befehlen soll ich im Internet googeln?
Ich finde es auf Anhieb nicht. :D
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

reddy hat geschrieben:Ich würde es aber bevorzugen, die Daten mit Python zu sortieren.
Nach welchen Befehlen soll ich im Internet googeln?
Ich würde mich einfach an die offizielle Dokumentation halten. Im Tutorial ziemlich weit vorne wird bereits die sort-Methode für Listen erwähnt. Das Verständnis des key-Parameters ist für eine flexible Sortierung wichtig. Experimentiere mal damit und wenn du da nicht weiterkommst, dann beschreibe hier deinen Ansatz und dein konkretes Problem damit. Wir können dich dann bestimmt in die richtige Richtung schubsen.
eckhard
User
Beiträge: 33
Registriert: Montag 14. Dezember 2015, 10:06
Wohnort: Karlsruhe

@reddy: Hier noch eine Lösung:

Code: Alles auswählen

L = [1, 2, 3, 4, 5]
datei = open('eins.txt',' w')
datei.write(', '.join((map(str, L))))
datei.close()
Mit map(str, L) werden alle Integerzahlen in der Liste in einen String gewandelt
und dann mit ', '.join zusammengefügt, wobei Komma gefolgt von Leerzeichen
als Trennung benutzt wird.
reddy
User
Beiträge: 21
Registriert: Donnerstag 17. März 2016, 23:29

Die Hilfe ist echt super hier. Danke schön an alle!
Ich versuche Python als Hobby zu lernen. Mit jeder Antwort kommen immer mehr Fragen. :D

Z.B. ich habe folgende drei Python-Scripte: 1.py, 2.py und 3.py.
Ich muss sie nacheinander ausführen. Zur Zeit verwende ich eine Batch-Datei zum Starten.

Geht es auch mit einem Python-Script? Das Programm muss folgendes machen.
1) Starte 1.py, warte bis es beendet wird, sonst Fehlermeldung.
2) Starte 2.py, warte bis es beendet wird, sonst Fehlermeldung.
3) Starte 3.py, warte bis es beendet wird, sonst Fehlermeldung.

Kann man es mit ein paar Zeilen Code realisieren?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@reddy: schreibe Deine Programme 1.py, 2.py und 3.py wie Module und rufe sie von einem Hauptskript aus auf.
Antworten