Seite 1 von 1
Nur letzten Teil einer TXT auslesen
Verfasst: Montag 29. Dezember 2014, 19:21
von Ragyal
Hallo,
ich hab ein Problem beim Auslesen einer sehr groß werdenden Textdatei, da das Programm auf einem Raspberry Pi läuft.
Ich speichere in der Datei Zahlen ab und wenn das Programm gestartet wird, werden die Zahlen aus der Datei ausgelesen, aber letztendlich brauche ich beim Starten nur die letzte Zahl aus der Datei.
Nun würde ich gerne, anstatt die ganze Datei in Python zu lesen, nur den letzten Teil bzw. die letzte Zahl auslesen, um den Aufwand gering zu halten.
Hat da jemand einen Tipp für mich?
Die Datei sieht momentan so aus:
Code: Alles auswählen
2,3,5,7,11,...,259397,259411,259421,259429,259451,259453,259459,259499,259507
bzw. so nach einem Versuch mit x.readlines():
Code: Alles auswählen
2\n3\n5\n7\n11\n...259397\n259411\n259421\n259429\n259451\n259453\n259459\n259499\n259507\n
Ein Dankeschön schon einmal im Voraus. Vielleicht gibt es eine nicht so rechen aufwändige Lösung.
Re: Nur letzten Teil einer TXT auslesen
Verfasst: Montag 29. Dezember 2014, 19:30
von BlackJack
@Ragyal: Das ist ja interessant das bei Dir beim lesen der Datei aus Kommas Zeilenendezeichen werden. Den Trick habe ich bis jetzt auch nicht gesehen.
Grundsätzlich sind Textdateien nicht für so einen Zugriff gemacht. Du kannst natürlich mit `seek()` den Dateizeiger soweit vom Ende der Datei platzieren, dass Du Dir sicher bist das mindestens die letzte Zeile dahinter ist, dann alles einlesen, am Trennzeichen aufteilen und das letzte Element nehmen.
Re: Nur letzten Teil einer TXT auslesen
Verfasst: Montag 29. Dezember 2014, 20:15
von Ragyal
Hab ich schlecht beschrieben, aber die zweite Variante hat nichts mit der ersten zu tun, sondern war nur zum Testen mit readlines gedacht, aber dadurch wurde der Rechenaufwand nicht geringer.
Ich guck mal was ich mit seek() hinkriege.
Re: Nur letzten Teil einer TXT auslesen
Verfasst: Montag 29. Dezember 2014, 21:37
von Ragyal
Okay danke ich würde es jetzt mit seek() machen können, aber es wird dadurch nicht schneller. Ich werde mir etwas anderes überlegen müssen ...
Re: Nur letzten Teil einer TXT auslesen
Verfasst: Montag 29. Dezember 2014, 21:44
von Hyperion
Ragyal hat geschrieben:
... aber letztendlich brauche ich beim Starten nur die letzte Zahl aus der Datei.
...
Hat da jemand einen Tipp für mich?
Wieso speicherst Du Dir dann nicht einfach nur *eine* Zahl? :K
Sollte es tatsächlich ein Performance-Problem geben, Du aber *alle* Zahlen benötigst, dann speicher halt *zwei* Dateien; in einer hängst Du alles an, die andere hält eben nur die letzte, für den nächsten Start benötigte Zahl...
Als letztes fiele mir eine Datenbank basierte Lösung ein... die Dinger sind spezialisiert auf schnellen Zugriff auf Daten

Re: Nur letzten Teil einer TXT auslesen
Verfasst: Montag 29. Dezember 2014, 21:47
von BlackJack
@Ragyal: Wenn es dadurch nicht schneller wird, dann war es von anfang an nicht zu langsam. Vielleicht solltest Du vor weiteren Versuchen erst einmal profilen wo die Zeit *tatsächlich* verbraucht wird.
Re: Nur letzten Teil einer TXT auslesen
Verfasst: Montag 29. Dezember 2014, 21:55
von darktrym
Wieso wird das nicht schneller? Anstatt linear die Liste durchzugehen, brauchst du nur konstante Zeit.
Re: Nur letzten Teil einer TXT auslesen
Verfasst: Montag 29. Dezember 2014, 22:01
von Hyperion
darktrym hat geschrieben:Wieso wird das nicht schneller? Anstatt linear die Liste durchzugehen, brauchst du nur konstante Zeit.
Vielleicht weil der OP an der falschen Stelle den Flaschenhals vermutet hat :K Ging das Einlesen vorher schon schnell, so "merkt" er natürlich nichts, sofern das IO
nicht das Problem war

Re: Nur letzten Teil einer TXT auslesen
Verfasst: Montag 29. Dezember 2014, 22:43
von Sirius3
Sollte es sich tatsächlich, wie es aussieht, um Primzahlen handeln, dann ist die gezeigt Datei gerade mal 150KB groß und beinhaltet gut 22000 Zahlen. Ich weiß jetzt nicht, ob es schneller wäre, die Zahl einfach zu berechnen, aber auch das lineare Lesen dürft in nicht-spürbarer Zeit erledigt sein.
Re: Nur letzten Teil einer TXT auslesen
Verfasst: Montag 29. Dezember 2014, 23:03
von BlackJack
Wobei es sich ja um einen Raspi handelt, also das Lesen sehr wahrscheinlich einer SD-Karte involviert. Da kann das Lesen beim Messen vielleicht tatsächlich der Teil des Programms sein in dem am meisten Zeit verbraucht wird.
