Löschen von Zeilen in einer Datei

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
Gast

Hi!
Hier mein Problem:
Ich möchte eine csv-Datei einlesen und nach einer bestimmten Spalte suchen, die "0" enthält. Wenn das der Fall ist, soll die komplette Zeile in der die 0 steht gelöscht werden.
Kann ich dann überhaupt mit 'readlines' einlesen? und wie heisst der Befehl für spaltenweise einlesen?
Dann müsste ich ja mit lines.remove weiterkommen
Hat da jemand einen Tipp?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Gast hat geschrieben: Ich möchte eine csv-Datei einlesen und nach einer bestimmten Spalte suchen, die "0" enthält. Wenn das der Fall ist, soll die komplette Zeile in der die 0 steht gelöscht werden.
Hi!

Ich würde das mit dem csv-Modul versuchen. Das erkennt automatisch die Struktur der CSV-Datei und kann durch die einzelnen Zeilen iterieren.

Code: Alles auswählen

import csv

quellname = "quelle.csv"
zielname  = "ziel.csv"

# Demoquelle erstellen
file(quellname, "w").writelines(
   [
      "a;b;c;d\n",
      "0;1;2;3\n",
      "4;5;6;7\n",
      "8;9;10;11\n"
   ]
)

# Struktur sniffen
quelldatei = file(quellname, "rb")
sn = csv.Sniffer()
dialect = sn.sniff(quelldatei.readline())
quelldatei.close()

# Ziel vorbereiten
zieldatei = file(zielname, "wb")
writer = csv.writer(zieldatei, dialect = dialect)

# Auslesen und in Zieldatei schreiben
quelldatei = file(quellname, "rb")
for line in csv.reader(quelldatei, dialect = dialect):
   if line[0] <> "0":
      writer.writerow(line)
quelldatei.close()
zieldatei.close()
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Gast

Super, danke, hat wunderbar geklappt!
Gast

nochmal was:
Es sollen die Spalten abhängig von der Überschrift durchsucht werden, also: Suche nach der Spalte mit der Überschrift 'a' und kontrolliere diese dann auf den Inhalt '0'.
Mit einer zweiten Bedingung: if---and kriege ich das irgendwie nicht unter...
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Gast hat geschrieben:nochmal was:
Es sollen die Spalten abhängig von der Überschrift durchsucht werden, also: Suche nach der Spalte mit der Überschrift 'a' und kontrolliere diese dann auf den Inhalt '0'.
Mit einer zweiten Bedingung: if---and kriege ich das irgendwie nicht unter...
Es wird Zeit, Python zu lernen ;-)

Code: Alles auswählen

# Auslesen und in Zieldatei schreiben
quelldatei = file(quellname, "rb")
position = None
for line in csv.reader(quelldatei, dialect = dialect):
   if position == None:
      position = line.index("a")
   if line[position] <> "0":
      writer.writerow(line)
quelldatei.close()
zieldatei.close()
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich habe den Thread tatsächlich mal geteilt, für alle die sich weiter beteiligen wollen, habe ich den Thread Die Zukunft von Python eröffnet.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten