Seite 1 von 1
File abgewisser Stelle lesen
Verfasst: Montag 17. Februar 2014, 01:58
von DKKA
Hallo,
Gibt es eine Möglichkeit wie ich ein Txt-File öffnen kann und dann direkt an eine gewisse Stelle (z.B. character 200) springen kann und erst von dort lesen kann?
Beispielsweise mein txt-file sieht so aus:
"#Kommentar.....
#......
#.......
#.......Hier fängt es an interessant zu werden....."
Wie kann ich jetzt zum "H" springen ohne das ganze File einzulesen und abzuscannen?
Re: File abgewisser Stelle lesen
Verfasst: Montag 17. Februar 2014, 02:32
von Balmung
Springt zur Position 200, und jedes weitere f.read liest dann von dort.
Es ist allerdings nicht möglich, ohne die Datei einzulesen, zu einem bestimmten Buchstaben/Wort etc. zu springen. Seek ergibt nur sinn, wenn man die gewünschte Position kennt.
Re: File abgewisser Stelle lesen
Verfasst: Montag 17. Februar 2014, 10:56
von cofi
Weil ihr beide von "Position" redet, was keinen Sinn ergibt, `file.seek` springt zu einem _Byte_ Offset. Soll heissen: Abhaengig von der Kodierung landet man nicht bei Zeichen 200 sondern vielleicht bei Zeichen 100, 50 oder ganz anders.
Re: File abgewisser Stelle lesen
Verfasst: Montag 17. Februar 2014, 11:02
von Hyperion
DKKA hat geschrieben:
Wie kann ich jetzt zum "H" springen ohne das ganze File einzulesen und abzuscannen?
Auch wenn cofi es implizit schon gesagt hat: Gar nicht!
Du kannst aber über die Text-Datei iterieren, *ohne* alle Zeilen im Speicher halten zu müssen. Sobald Du an die "spannende" Stelle kommst, fängst Du eben mit der Verarbeitung an. Löst das Dein Problem vielleicht schon?
Re: File abgewisser Stelle lesen
Verfasst: Montag 17. Februar 2014, 11:24
von snafu
@DKKA: Das ist so ähnlich wie bei
http://www.python-forum.de/viewtopic.ph ... 33#p252933. Du liest die Daten zeilenweise und machst eine Fallunterscheidung.
Fall 1: Die gesuchte Zeile wurde gefunden -> Setze entsprechende Markierung.
Fall 2: Die Markierung ist gesetzt -> Mache mit der aktuellen Zeile eine entsprechende Verarbeitung.
Fall 3 (falls nötig): Der interessante Bereich wurde verlassen -> Setze die Markierung wieder auf "False".
EDIT: Man kann alternativ auch einen Iterator erzeugen und diesen ab der interessanten Stelle an die Verarbeitungsfunktion übergeben. Diese müsste dann wissen, wann sie die Verarbeitung beenden soll (also: wann Fall 3 eintritt). Die nächste Zeile würde dann jeweils mittels `next(dein_iterator)` geholt werden. Sofern die Datei mit `open(dateipfad)` geöffnet wurde, wird übrigens automatisch ein passendes Dateiobjekt geliefert, das via `next(dateiobjekt)` die nächste Zeile für den Datenstrom ausspuckt.
EDIT2: Vergiss bitte alles ab `next()`. Selbstverständlich kann man auch über den an die Funktion übergebenen Iterator eine `for`-Schleife machen, ich Dummerchen...
