Listeneinträge an Dateizeilen anhängen

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
Hänsel
User
Beiträge: 1
Registriert: Donnerstag 27. Juli 2017, 17:46

Hi,

ich habe ein Problem und weiss nicht so recht wie ich es gelöst bekomme -- hoffe Ihr könnt mir helfen.

Ich habe eine Textdatei mit folgendem Format:
1;2;3
4;5;6
7;8;9

und eine Liste mit diesem Format:
liste = ["a","b","c"]

Nun möchte Ich in jede Zeile der Textdatei einen Eintrag der Liste mit dem hier verwendeten Trennzeichen >;< anfügen, um folgenden Format zu erhalten:
1;2;3;a
4;5;6;b
7;8;9;c


Das habe ich bisher probiert, jedoch komme ich nicht weiter.

Code: Alles auswählen

DATEI = open("liste.txt", 'r+')
liste = ["a","b","c"]

for i in liste:
	for linie in DATEI:
		newline = linie+";"+i
		print newline
		write_newline = linie.replace(linie, newline)
		DATEI.write(write_newline)
DATEI.close()




(BIN ABSOLUTER NEULING ;-) )
Zuletzt geändert von Anonymous am Donnerstag 27. Juli 2017, 18:07, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@Hänsel: Namen komplett in Grossbuchstaben werden per Konvention für Konstanten verwendet. Lesestoff: Style Guide for Python Code.

`linie` ist hier die falsche Übersetzung von `line`. Das übersetzt man in diesem Fall mit `zeile`.

`i` als Laufvariable in einer Schleife an etwas anderes zu binden als ganze Zahlen ist sehr unerwartet. Verwende vernünftige Namen. Beim Namen `newline` würde man eventuell das Newline-Zeichen erwarten. `new_line` ist da etwas eindeutiger.

In welchen Fällen unterscheidet sich `write_newline` denn von `newline`? Mit anderen Worten: Warum machst Du das in Zeile 8? Was denkst Du was das bewirkt?

Insgesamt könntest Du mal erklären was Du denkst was da in den beiden ``for``-Schleifen in welcher Reihenfolge passiert.

Man kann nicht, jedenfalls nicht auf diese Weise, gleichzeitig aus der gleichen Textdatei lesen und schreiben. Selbst wenn das ginge und es für lesen und schreiben unanhängige Zeiger auf die Position innerhalb der Datei gäbe: Die neuen Zeilen sind ja länger als die alten, also würde das Schreiben einer neuen Zeile den Anfang der nächsten alten Zeile überschreiben, was zu sehr kaputten Daten führen würde. Vergiss am besten das es die Dateimodi mit '+' gibt. Du musst entweder die Datei komplett in den Speicher lesen und dann mit den neuen Daten neu schreiben, oder eine neue, temporäre Datei schreiben und die dann am Ende zur alten umbenennen. Letzteres hat den Vorteil das man, sollte etwas schief laufen und das Programm abgebrochen werden, immer noch die kompletten alten Daten hat und nicht eine halbe Datei mit den neuen Daten und keine alten Daten mehr.

Du suchst die `zip()`-Funktion und dann *eine* ``for``-Schleife.

Und die gelesenen Zeilen haben am Ende ein Newline-Zeichen. Das musst Du entfernen bevor Du etwas anhängen kannst und dann an die neue Zeile am Ende auch wieder ein Newline-Zeichen anhängen.

Bezüglich des schliessens der Datei könntest Du Dir die ``with``-Anweisung mal anschauen.
Antworten