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.
Gast

Löschen von Zeilen in einer Datei

Beitragvon Gast » Dienstag 14. Juni 2005, 14:34

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Löschen von Zeilen in einer Datei

Beitragvon gerold » Dienstag 14. Juni 2005, 21:31

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

Beitragvon Gast » Mittwoch 15. Juni 2005, 08:28

Super, danke, hat wunderbar geklappt!
Gast

Beitragvon Gast » Mittwoch 15. Juni 2005, 10:42

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Mittwoch 15. Juni 2005, 11:03

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.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 16. Juni 2005, 13:35

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 Modvoice

Wer ist online?

Mitglieder in diesem Forum: Mephisto, Yahoo [Bot]