Hallo zusammen,
ich bin absoluter Python Neuling. Hab schon ewig im Netz gesucht und keine Antwort gefunden.
Ich habe folgendes Problem:
In einer Menge Binärdateien befinden sich jeweils am ENDE der Datei Informationen im "normlen" ASCI Text Format.
Jetzt soll in diesem Text ein bestimmter String gesucht werden und wenn dieser gefunden ist die Datei kopiert werden.
Gemacht habe ich das im moment mit dem line.find.
Jetzt habe ich das Problem das manche Dateien in denen sich der String befindet tortzdem nicht kopiert werden. Ich habe den Verdacht das beim Durchsuchen der Datei irgendwo durch Zufall das "EOF" Zeichen für Text Dateien kommt und Python damit das suchen aufhört weil es denkt "die Datei ist zuende".
Weiß jemand rat wie ich das hin kriegen kann das auf alle Fälle bis zum Ende gesucht wird oder woran es sonst noch liegen könnte ?
Viele Grüße,
Tomduli
Binär Datei durchsuchen
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Wenn die Dateien nicht zu groß sind, kannst du einfach alles auf einmal einlesen (`.read`) und dann von hinten (`.rfind`) oder vorn (`.find`) in den String suchen.
@Dauerbaustelle: Ist das wirklich so, dass von hinten gesucht wird? In der Doku steht ja erstmal nur, das quasi das letzte Vorkommen des gesuchten Strings angezeigt wird. Das sagt für mich jetzt nicht unbedingt etwas über das implementierte Vorgehen der Funktion aus.
Die Frage des Threaderstellers ist damit übrigens nicht beantwortet. Diese ist ja, ob man mit Python über das EOF hinauslesen kann.
Die Frage des Threaderstellers ist damit übrigens nicht beantwortet. Diese ist ja, ob man mit Python über das EOF hinauslesen kann.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ich denke mal die Lösung ist es, die Datei eben als Binärdatei zu öffnen, zur betreffenden Stelle zu springen (``seek``) und den letzten Teil als Text zu behandeln.
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: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Na klar, `read` liest immer bis zum Ende. Das war gefragt.snafu hat geschrieben:Die Frage des Threaderstellers ist damit übrigens nicht beantwortet. Diese ist ja, ob man mit Python über das EOF hinauslesen kann.
@snafu: Auch wenn es da nicht explizit steht wäre es schon *ziemlich* blöd implementiert wenn `rfind()` nicht von hinten sucht.
@Dauerbaustelle: Ob `read()` wirklich bis zum Ende liest hängt vom Betriebssystem und dem Modus beim öffnen ab. Bei Windows hört's bei als Textdatei geöffneten Dateien beim EOF auf.
@Dauerbaustelle: Ob `read()` wirklich bis zum Ende liest hängt vom Betriebssystem und dem Modus beim öffnen ab. Bei Windows hört's bei als Textdatei geöffneten Dateien beim EOF auf.