Csv.Writer in einer for-schleife

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
_corn_
User
Beiträge: 27
Registriert: Montag 8. November 2021, 09:04

Hallo Zusammen,

ich melde mich mal wieder :o . Mein "Problem" sieht folgendermaßen aus:

Code: Alles auswählen

for zeile in reader:
	if zeile[1] in data:
		with open ('Datei.csv', 'w', encoding='utf-8', newline='') as csv_schreiben:
			writer = csv.writer(csv_schreiben, dialect='excel')
			writer.writerow(["Geht])
			
	else:
		print(zeile[1])
		print("Fehler: Nicht in der Liste gefunden")
Die For- und If-Schleife funktioniert prinzipiell so, wie ich es mir vorstelle, jedoch schreibt er beim writer nur einmal die Zeile "Geht" statt für jeden Schleifendurchgang "Geht". Wenn ich das gleiche mit Print mache, funktioniert es jedoch und in der Console wird für jede Zeile ein "Geht" ausgegeben, nur nicht beim writer. Wo liegt hier der Fehler oder was kann ich machen, damit der Writer für jede Zeile ein "einzelnes" geht ausgibt.
Ich hoffe Ihr versteht das Problem. Ich würde mich extrem über Antworten freuen :D .
LG Corn
einfachTobi
User
Beiträge: 512
Registriert: Mittwoch 13. November 2019, 08:38

Dieser Code ist ohnehin nicht läuffähig, weil SyntaxError und NameError. Wie ist `reader` definiert? Wie ist `data` definiert? Wie sehen die csv-Dateien aus? Poste den Code, den du tatsächlich laufen lässt und nicht irgendwas aus dem Gedächtnis abgetipptes.
Neben diesen grundsätzlichen Problemen öffnest du die Datei eben immer wieder im 'write'-Modus, was dazu führt, dass sie überschrieben wird. Schau dir den 'append'-Modus für das Öffnen an: https://docs.python.org/3/library/functions.html#open.
_corn_
User
Beiträge: 27
Registriert: Montag 8. November 2021, 09:04

Mir ist gerade das Grundlegende Problem selber aufgefallen, also brauch ich nur noch einen Lösungsweg dafür. Der Csv-Writer überschreibt bei jeden durchlauf die erste Zeile, sodass nur noch der letzte durchlauf "stehen bleibt". Wie kann ich Ihm sagen, dass er bei 2ten durchlauf in der 2ten Reihe schreiben soll?

Vielen dank und LG Corn
_corn_
User
Beiträge: 27
Registriert: Montag 8. November 2021, 09:04

Danke @einfachTobi. Ist mir gerade selber aufgefallen. LG
Sirius3
User
Beiträge: 18278
Registriert: Sonntag 21. Oktober 2012, 17:20

Eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs.
Die Lösung ist, nicht immer wieder die neu zu öffnen, sondern nur einmal.

Code: Alles auswählen

with open('Datei.csv', 'w', encoding='utf-8', newline='') as csv_schreiben:
    writer = csv.writer(csv_schreiben, dialect='excel')
    for zeile in reader:
        if zeile[1] in data:
            writer.writerow(["Geht"])
        else:
            print(zeile[1])
            print("Fehler: Nicht in der Liste gefunden")
_corn_
User
Beiträge: 27
Registriert: Montag 8. November 2021, 09:04

Vielen Dank @Sirius3
Antworten