Frage zu Python Code?
Hallo,
ich arbeite gerade an einem Python Skript bei der mich vor allem eine Spalte in einer csv Datei interessiert. Die Spalte sieht folgendermaßen aus:
Mein grundsätzliches Ziel ist jetzt, immer dann wenn es in einer Zeile der Spalte ein Komma gibt, möchte ich die Zeile kopieren und diese in eine neue Zeile hinzufügen. In der neuen Zeile steht dann aber nur noch der Wert hinter dem Komma.
Also nur noch "180/4" anstelle von "149/12, 180/4".
Bis jetzt macht es mir noch Spaß am Skript zu tüfteln aber ich hänge an einer Stelle die ich nicht verstehe und ich hoffe, dass mir das jemand erklären kann. Mein Code sieht bisher folgendermaßen aus:
Mein print Ergebnis ist folgendes:
Mein erwartetes Ergebnis ist allerdings:
180/4
149/12, 180/4
2/1
1, 2/1
So wie ich das sehe, mache ich doch in Zeile 8 eine Kopie von der Zeile in "new_row". Dann Überschreibe ich "new_row" mit meinem Split. Offensichtlich überschreibe ich aber nicht nur "new_row", sondern auch meine normale Zeile (row). Das kann doch gar nicht sein, ich öffne die .csv Datei doch nur im lese Modus oder nicht? Die eigentliche Zeile habe ich doch gar nicht angefasst. Kann mir jemand mein Ergebniss erklären?
Grüße
2 Antworten
Nein, Du machst in Zeile 8 keine Kopie des Inhalts von row, sondern eine Kopie auf die Referenz. Das heißt row und new_row bezeichnen dasselbe Objekt (Hier: eine Liste). Dann tauscht Du das Element[4] dieser einen Liste durch ein anderes aus.
Du könntest stattdessen nur die Dich interessierende Spalte bearbeiten:
new_row = row[4] #Jetzt enthält new_row nur einen String und keine Liste mehr
#Dann machst Du Deinen Split mit new_row statt new_row[4]
Und Deine print-befehle
print(new_row)
print(row[4])
Und natürlich wird auch Deine Änderung an row[4] nicht in die Datei geschrieben. Es wird der Wert im Speicher verändert, der das Eingelese enthält.
mmh ok verstehe, dann muss ich mal recherchieren, wie ich in meine csv Datei reinschreibe.
Danke für die Antwort :). Ich komne erst morgen wieder dazu mich damit auseinanderzusetzen, wollte aber dennoch schonmal danje sagen :)
Wo dein Fehler ist, hat Olokun dir ja schon erklärt. Ich würde das Problem so lösen, dass ich alle Werte aus Spalte 4 in eine Liste packe, die mit dem gleichen Trennzeichen in einen String schreibe und wieder extrahiere. Also so:
import csv
all_numbers = list()
with open(r"C:\temp\test.csv") as csv_file:
for row in csv.reader(csv_file, delimiter=';'):
# Alle Zahlen aus Spalte 4 in eine Liste packen
all_numbers.append(row[4])
# Mit Kommas getrennt in einen String schreiben
temp = ", ".join(all_numbers)
# und zusammen mit den vorher schon Komma-getrennten Zahlen wieder in eine Liste schreiben
all_numbers = temp.split(", ")
Danke für die Antwort :). Ich komne erst morgen wieder dazu mich damit auseinanderzusetzen, wollte aber dennoch schonmal danje sagen :)