Hallo Liebe Python Freunde
Ich habe eine Frage, wie bekomme ich es hin in einer TXT Datei immer
in einer While schleife immer nur die Letze Zeile einzulesen.
Ich habe dazu einfach keine Lösung gefunden, ich würde mich sehr über
einen kleinen Sampel Code freuen.
LG ST
TXT Datei bewachen
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Kapiere ich nicht! Wozu ne Schleife, wenn Du nur die letzte Zeile willst? Gib doch mal ein minimales Beispiel mit einer Textdatei und was in der Schleife damit passieren soll!sttrader hat geschrieben: Ich habe eine Frage, wie bekomme ich es hin in einer TXT Datei immer
in einer While schleife immer nur die Letze Zeile einzulesen.
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
Also es geht darum das ich Handelssysteme habe in der Signale in einer
.txt Datei gespeichert werden das sieht dann so aus.
Ich muss also wenn es änderungen in der Letzten zeile gibt diese einlesen
verarbeiten um z.b Orders zu senden was auch kein Problem ist.
Eben nur die Letzte Zeile auf änderungen zu Prüfen bekomme ich nicht hin.
LG ST
.txt Datei gespeichert werden das sieht dann so aus.
Code: Alles auswählen
08/06/2010 11:20:00 463 Sell 6339,91 -1
08/06/2010 12:05:00 472 Exitshort 6346,35 0 -6,44
08/12/2010 10:35:00 982 Sell 6140,79 -1
08/12/2010 12:05:00 1000 Exitshort 6131,28 0 9,51
verarbeiten um z.b Orders zu senden was auch kein Problem ist.
Eben nur die Letzte Zeile auf änderungen zu Prüfen bekomme ich nicht hin.
LG ST
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ach so. Also das könntest Du so realisieren:
Das StringIO-Objekt namens "f" repräsentiert hier Deine Datei, die Du eigentlich mit "with open(filename, "r") as irgend_was:" laden würdest.
Code: Alles auswählen
In [41]: from StringIO import StringIO
In [42]: data = """
....: 08/06/2010 11:20:00 463 Sell 6339,91 -
1
....: 08/06/2010 12:05:00 472 Exitshort 6346,35
0 -6,44
....:
....: 08/12/2010 10:35:00 982 Sell 6140,79 -
1
....: 08/12/2010 12:05:00 1000 Exitshort 6131,28
0 9,51
....: """
In [43]: f = StringIO(data)
In [44]: last_line = f.readlines()[-1]
In [45]: print last_line
-------> print(last_line)
08/12/2010 12:05:00 1000 Exitshort 6131,28 0
9,51
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
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Ich denke der OP will einfach die letzte Zeile präsentiert haben, aber nur wenn sich etwas aendert.
Unter Linux wäre z.b. inotify eine Loesung: http://trac.dbzteam.org/pyinotify
Unter Linux wäre z.b. inotify eine Loesung: http://trac.dbzteam.org/pyinotify
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ist natürlich schöner als periodisches "Abtasten", da hast Du recht.
Ich hatte da eben nur diesen "primitiven" Ansatz erkannt; wobei er sich ja die jeweils aktuelle merken kann und mit der vermeindlich neuen abgleichen könnte. Dazu eine Schleife, die eben alle x Sekunden das File läd und man hätte auch eine, wenn auch schlechtere, Lösung.
Ich hatte da eben nur diesen "primitiven" Ansatz erkannt; wobei er sich ja die jeweils aktuelle merken kann und mit der vermeindlich neuen abgleichen könnte. Dazu eine Schleife, die eben alle x Sekunden das File läd und man hätte auch eine, wenn auch schlechtere, Lösung.
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
Danke euch für eure gedanken dazu
Das Problem ist das die Software schon einen recht grossen umfang hat
und ich versuche so wenig wie möglich fremde Add onś zu nutzen
wegen der Wartbarkeit insofern war ich schon zu frieden als Tix zum
Standart wurde
Das Problem ist das die Software schon einen recht grossen umfang hat
und ich versuche so wenig wie möglich fremde Add onś zu nutzen
wegen der Wartbarkeit insofern war ich schon zu frieden als Tix zum
Standart wurde
Falls ich Dich richtig verstehe, suchst Du nach einem Äquivalent zu tail. Das gibt es hier: http://pypi.python.org/pypi/tailer/0.2.1
Code: Alles auswählen
import tailer
for line in tailer.follow(open('test.txt')):
print line
https://www.xing.com/go/invite/18513630.6a91d4
Hallo Hyperion
Was mache ich hier Falsch es wird nie der inhalt ausgeben sondern immer:
<open File " test.txt ", mode "r" at 0x1f0c9c0>
LG ST
Was mache ich hier Falsch es wird nie der inhalt ausgeben sondern immer:
<open File " test.txt ", mode "r" at 0x1f0c9c0>
Code: Alles auswählen
import string
from StringIO import StringIO
import time
def OrderRead():
fobj = open("test.txt","r")
data = StringIO(fobj)
last_line = data.readlines()[-1]
print last_line
#print(last_line)
fobj.close()
Start()
def Start():
time.sleep(10)
OrderRead()
Start()
LG ST
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Wie ich schon mal schrieb:
Allerdings solltest Du Dateien immer mit with öffnen.
Denn dabei wird die datei auf jeden Fall geschlossen - man braucht sich darum nicht mehr selber kümmern.
Ok, besser wäre ein "File like object" gewesen. StringIO habe ich doch nur genommen, weil ich keine Datei extra für die Demonstration anlegen wollte. So ein Objekt simuliert nur genau das, was Du so auch bekommen würdest:Hyperion hat geschrieben: Das StringIO-Objekt namens "f" repräsentiert hier Deine Datei, die Du eigentlich mit "with open(filename, "r") as irgend_was:" laden würdest.
Code: Alles auswählen
infile = open("filename", "r")
Code: Alles auswählen
with open("filename", "r") as infile:
# hier ist infile nun verfügbar
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
Laut http://docs.python.org/library/stringio ... O.StringIO ist das Argument für diese Methode ein String und kein File-like-Object. Das kann deswegen so nicht klappen.
Die Verwendung von with ist auf alle Fälle sinnvoll.
Die Verwendung von with ist auf alle Fälle sinnvoll.
https://www.xing.com/go/invite/18513630.6a91d4
Nun habe ich es geändert aber print last_line gibt nichts aus ????
LG ST
Code: Alles auswählen
import string
import time
def OrderRead():
infile = open("test.txt", "r")
with open("test.txt", "r") as infile:
last_line = infile.readlines()[-1]
print "ich bin in der def "
print last_line
#infile.close()
Start()
def Start():
time.sleep(1)
OrderRead()
Start()
Probier es mal so:
Edit: import string entfernt.
Code: Alles auswählen
import time
if __name__ == "__main__":
while True:
time.sleep(1)
with open("test.txt") as infile:
last_line = infile.readlines()[-1]
print last_line,
https://www.xing.com/go/invite/18513630.6a91d4
Hallo lutz.horn
In deinem bsb wirt last_line ebenfalls nicht ausgegeben??
LG ST
In deinem bsb wirt last_line ebenfalls nicht ausgegeben??
LG ST
Alles klar der fehler lag in der TXT datei er hat die Letzte Zeile ausgegeben
die war aber ohne jeglichen inhalt
Ich danke euch allen für eure Hilfe wirklich ein sehr Nettes Forum
die war aber ohne jeglichen inhalt
Ich danke euch allen für eure Hilfe wirklich ein sehr Nettes Forum
@sttrader: Funktionsaufrufe sollte man nicht als unbedingte "Sprungbefehle" missbrauchen. Nach spätestens 500 Sekunden dürfte Dein Programm auf einem normalen CPython mit einer Fehlermeldung aussteigen, dass das Rekursionslimit erreicht ist. Schreib Funktionen so, dass sie auch zurückkehren und benutze für Schleifen die dafür vorgesehenen Schleifenkonstrukte.
Danke für den Hinweis werde dies in Zukunft besser beachten.