In Datei suchen, ersetzen oder anfügen

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
logmaster
User
Beiträge: 4
Registriert: Freitag 13. Januar 2012, 12:15

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
Benutzeravatar
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.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
logmaster
User
Beiträge: 4
Registriert: Freitag 13. Januar 2012, 12:15

Danke für die Antwort! Das werde ich gleich mal machen...
logmaster
User
Beiträge: 4
Registriert: Freitag 13. Januar 2012, 12:15

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
Benutzeravatar
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.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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
Die Lösung ist einfach. Verwende einen Wachhund. :D

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.
logmaster
User
Beiträge: 4
Registriert: Freitag 13. Januar 2012, 12:15

/me hat geschrieben:
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
Die Lösung ist einfach. Verwende einen Wachhund. :D

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!!!

DANKE
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

logmaster hat geschrieben: Jaaaa, super. Das hat funktioniert!!!
Hast Du jetzt "n" solche Flags? Wenn ja, wie speicherst Du die? Oder gehst Du die Datei "n" mal durch?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Hyperion hat geschrieben:Hast Du jetzt "n" solche Flags? Wenn ja, wie speicherst Du die? Oder gehst Du die Datei "n" mal durch?
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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

/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.
Ok, das habe ich anders verstanden - ansonsten hast Du natürlich recht.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Mattversuchts
User
Beiträge: 22
Registriert: Dienstag 4. September 2012, 09:34

Gibt es inzwischen dafür eine Lösung?
evtl. mit Code?!
:)
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Mattversuchts hat geschrieben:Gibt es inzwischen dafür eine Lösung?
Ja klar. Der oben erwähnte "Wachhund". Welche Schwierigkeiten hast du denn konkret damit?
Antworten