Hallo Liebe Python Freund
Ich habe mal eine Banale Frage in der ich im Netz einfach keine lösung
gefunden habe
Wie kann ich mit einer while schleife, in einer txt Datei immer
nur die Letzte zeile auslesen.
LG ST
Letzte Zeile einer Text Datei Lesen
-
- User
- Beiträge: 424
- Registriert: Montag 28. Juli 2003, 16:19
- Wohnort: /dev/reality
files.readlines() und slicing sind deine Freunde.
@querdenker: IMHO keine guten Freunde, das skaliert nicht besonders gut mit der Dateigrösse.
@sttrader: Warum ``while``? Eine ``for``-Schleife über die Datei wäre einfacher.
@sttrader: Warum ``while``? Eine ``for``-Schleife über die Datei wäre einfacher.
Und für sehr große Dateien vielleicht so in der Art:
Code: Alles auswählen
import os
def last_line(filename, chunk_size=80):
nl = os.linesep
with open(filename) as f:
while True:
f.seek(-(chunk_size), 2)
chunk = f.read()
if nl in chunk[:-1]:
return chunk.splitlines()[-1]
chunk_size *= 2
@snafu: Das funktioniert so nicht. Du öffnest die Datei im Textmodus, also wirst du immer nur '\n' als Zeilenseparator bekommen und deshalb wird ``os.linesep in chunk`` beispielsweise unter Windows nicht wahr.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Ich dachte, Python würde inzwischen standardmäßig "universal newlines" aktivieren. Na dann halt etwas weniger low-leveliger. So viel wird das Erstellen einer Liste in diesem Fall schon nicht ausmachen, oder?
Code: Alles auswählen
def last_line(filename, chunk_size=80):
with open(filename) as f:
while True:
f.seek(-(chunk_size), 2)
lines = f.read().splitlines()
if len(lines) > 1:
return lines[-1]
chunk_size *= 2
-
- User
- Beiträge: 424
- Registriert: Montag 28. Juli 2003, 16:19
- Wohnort: /dev/reality
@BlackJack: Da sttrader nichts über die Dateigröße gesagt hat...Ansonsten hast du recht. Bei einer bekannten (zu erwartenden) Größe und eventuell noch ein paar Zeilen aus der Textdatei hätte ich auch was anderes vorgeschlagen.
Hallo ihr alleBlackJack hat geschrieben:@querdenker: IMHO keine guten Freunde, das skaliert nicht besonders gut mit der Dateigrösse.
@sttrader: Warum ``while``? Eine ``for``-Schleife über die Datei wäre einfacher.
Danke für eure Hilfsbereitschaft
Warum while schleife weil ich eine txt Datei für mein Trading Bot
überwachen muss in der die Kauf und Verkaufs Aufträge Real Time
eingetragen werden. Wenn es da Änderungen gibt sollen sie ausgelesen werden.
Im extrem Fall ist die Datei 200 - 300 Zeilen gross
LG ST
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Darum kommst du mit `os.linesep` ja auch nicht weiter universal -> '\n'snafu hat geschrieben:Ich dachte, Python würde inzwischen standardmäßig "universal newlines" aktivieren.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
@cofi: "universal newlines" ist nochmal was anderes als die unter Windows übliche Umwandlung von "\r\n" zu "\n", für die die C-Standardbibliothek unter Windows verantwortlich ist und die nicht nur Python betrifft.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Das stimmt schon, aber `universal newlines` macht das gleiche.
Es springt aber nur bei `rU` und `U` an.
Es springt aber nur bei `rU` und `U` an.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Universal Newlines habe ich so verstanden, dass es bei der Ausgabe schon platformabhängig ist.
Zumindest sagt der Docstring zu `io.open` unter Python 2.6:
Was mich aber dann verwundert:
Zumindest sagt der Docstring zu `io.open` unter Python 2.6:
Ich hatte gedacht, dass dies auch das Verhalten für das Built-in `open` wäre. Getestet habe ich es unter Windows noch nicht. Und `newlines` steht bei `io.open` auf `None`. Aber gut, offenbar sind `io.open` und `open` etwas anderes, wenn man nach deiner Aussage geht.newline controls how universal newlines works (it only applies to text
mode). It can be None, '', '\n', '\r', and '\r\n'. It works as
follows:
* On input, if newline is None, universal newlines mode is
enabled. Lines in the input can end in '\n', '\r', or '\r\n', and
these are translated into '\n' before being returned to the
caller. If it is '', universal newline mode is enabled, but line
endings are returned to the caller untranslated. If it has any of
the other legal values, input lines are only terminated by the given
string, and the line ending is returned to the caller untranslated.
* On output, if newline is None, any '\n' characters written are
translated to the system default line separator, os.linesep. If
newline is '', no translation takes place. If newline is any of the
other legal values, any '\n' characters written are translated to
the given string.
Was mich aber dann verwundert:
The [mod]io[/mod] module provides the Python interfaces to stream handling. The built-in open() function is defined in this module.
@sttrader: Also Deine Erklärung für die ``while``-Schleife war irgendwie keine. Wenn man die Datei Zeilenweise liest um an die letzte ranzukommen, ist eine ``for``-Schleife einfacher.