Hallo zusammen,
ich beiße mir seit gestern die Zähne an folgendem Problem aus: ich möchte den Inhalt einer Datei einlesen und nach Teilstrings (die ich in einer Liste gespeichert habe) suchen. Taucht ein bestimmter String auf möchte ich ihn durch einen bestimmten String (evtl. wieder in einer Liste gespeichert...) ersetzen. Taucht ein String in der GANZEN Datei nicht auf, möchte ich eine Zeile an die Datei anfügen...
Wie stelle ich das am geschicktesten an?
DANKE im Voraus für die Hilfe
In Datei suchen, ersetzen oder anfügen
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Also ganz grob würde ich mir mal das `re`-Modul angucken und anhand von RegExps die Datei durchsuchen. Evtl. könnte `re.subn` da schon die Lösung sein.
Das Anfügen kannst Du per `"".join()`-Methode realisieren, indem Du die neuen Zeilen einfach in einer Liste vermerkst.
Du kannst letztlich nicht direkt die Datei verändern, sondern musst den Inhalt einlesen, dann die Änderungen durchführen und anschließend die neuen Daten wieder in eine Datei (ggf. die alte überschreiben) schreiben.
Das Anfügen kannst Du per `"".join()`-Methode realisieren, indem Du die neuen Zeilen einfach in einer Liste vermerkst.
Du kannst letztlich nicht direkt die Datei verändern, sondern musst den Inhalt einlesen, dann die Änderungen durchführen und anschließend die neuen Daten wieder in eine Datei (ggf. die alte überschreiben) schreiben.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Hm, ich glaube mein größtes Problem ist, dass ich bisher die Datei Zeile für Zeile nach den Strings durchsuche... Findet das Programm den String nicht wird eine Zeile hinzugefügt... Bisher also für jede Zeile, in der der String nicht gefunden wird. Das möchte ich natürlich nicht. Die Zeile soll erst hinzugefügt werden, wenn das Programm am Ende der Datei angekommen ist und in der gesamten Datei den String nicht gefunden hat :K
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Bisher wurde ja nicht erwähnt, dass Du Zeilenweise vorgehen kannst...
Aber ich schrieb ja schon die Lösung: Merke Dir die hinzuzufügenden Zeilen in einer separaten Liste. Ganz am Schluss kannst Du die dann an die Datei anfügen.
Aber ich schrieb ja schon die Lösung: Merke Dir die hinzuzufügenden Zeilen in einer separaten Liste. Ganz am Schluss kannst Du die dann an die Datei anfügen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Die Lösung ist einfach. Verwende einen Wachhund.logmaster hat geschrieben:Die Zeile soll erst hinzugefügt werden, wenn das Programm am Ende der Datei angekommen ist und in der gesamten Datei den String nicht gefunden hat :K
Setze vor der Schleife "value_found = False". Findest du in der Schleife einen passenden Wert, dann setze "value_found = True". Nach der Schleife kannst du dann "if not value_found:" bei Bedarf den String hinzufügen.
Jaaaa, super. Das hat funktioniert!!!/me hat geschrieben:Die Lösung ist einfach. Verwende einen Wachhund.logmaster hat geschrieben:Die Zeile soll erst hinzugefügt werden, wenn das Programm am Ende der Datei angekommen ist und in der gesamten Datei den String nicht gefunden hat :K
Setze vor der Schleife "value_found = False". Findest du in der Schleife einen passenden Wert, dann setze "value_found = True". Nach der Schleife kannst du dann "if not value_found:" bei Bedarf den String hinzufügen.
DANKE
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Hast Du jetzt "n" solche Flags? Wenn ja, wie speicherst Du die? Oder gehst Du die Datei "n" mal durch?logmaster hat geschrieben: Jaaaa, super. Das hat funktioniert!!!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Wenn ich das richtig verstanden habe kommt es bei der Aufgabe doch nur darauf an, ob überhaupt irgendeiner der Ausdrücke passt. Damit reicht dann ein Flag.Hyperion hat geschrieben:Hast Du jetzt "n" solche Flags? Wenn ja, wie speicherst Du die? Oder gehst Du die Datei "n" mal durch?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ok, das habe ich anders verstanden - ansonsten hast Du natürlich recht./me hat geschrieben: Wenn ich das richtig verstanden habe kommt es bei der Aufgabe doch nur darauf an, ob überhaupt irgendeiner der Ausdrücke passt. Damit reicht dann ein Flag.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
-
- User
- Beiträge: 22
- Registriert: Dienstag 4. September 2012, 09:34
Gibt es inzwischen dafür eine Lösung?
evtl. mit Code?!
evtl. mit Code?!