Seite 1 von 1
TXT Datei bewachen
Verfasst: Donnerstag 12. August 2010, 13:39
von sttrader
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
Re: TXT Datei bewachen
Verfasst: Donnerstag 12. August 2010, 13:50
von Hyperion
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.
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!
Re: TXT Datei bewachen
Verfasst: Donnerstag 12. August 2010, 13:56
von sttrader
Also es geht darum das ich Handelssysteme habe in der Signale in einer
.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
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
Re: TXT Datei bewachen
Verfasst: Donnerstag 12. August 2010, 14:00
von Hyperion
Ach so. Also das könntest Du so realisieren:
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
Das StringIO-Objekt namens "f" repräsentiert hier Deine Datei, die Du eigentlich mit "with open(filename, "r") as irgend_was:" laden würdest.
Re: TXT Datei bewachen
Verfasst: Donnerstag 12. August 2010, 14:14
von cofi
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
Re: TXT Datei bewachen
Verfasst: Donnerstag 12. August 2010, 14:19
von Hyperion
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.
Re: TXT Datei bewachen
Verfasst: Donnerstag 12. August 2010, 14:23
von sttrader
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

Re: TXT Datei bewachen
Verfasst: Freitag 13. August 2010, 07:34
von lutz.horn
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
Re: TXT Datei bewachen
Verfasst: Samstag 14. August 2010, 16:16
von sttrader
Hallo Hyperion
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
Re: TXT Datei bewachen
Verfasst: Samstag 14. August 2010, 16:27
von lutz.horn
Wozu StringIO? Lies doch direkt vom fobj.
Re: TXT Datei bewachen
Verfasst: Samstag 14. August 2010, 16:29
von Hyperion
Wie ich schon mal schrieb:
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.
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:
Allerdings solltest Du Dateien
immer mit
with öffnen.
Code: Alles auswählen
with open("filename", "r") as infile:
# hier ist infile nun verfügbar
Denn dabei wird die datei auf jeden Fall geschlossen - man braucht sich darum nicht mehr selber kümmern.
Re: TXT Datei bewachen
Verfasst: Samstag 14. August 2010, 16:32
von lutz.horn
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.
Re: TXT Datei bewachen
Verfasst: Samstag 14. August 2010, 16:49
von sttrader
Nun habe ich es geändert aber print last_line gibt nichts aus ????
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()
LG ST
Re: TXT Datei bewachen
Verfasst: Samstag 14. August 2010, 16:55
von lutz.horn
Probier es mal so:
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,
Edit: import string entfernt.
Re: TXT Datei bewachen
Verfasst: Samstag 14. August 2010, 17:04
von sttrader
Hallo lutz.horn
In deinem bsb wirt last_line ebenfalls nicht ausgegeben??
LG ST
Re: TXT Datei bewachen
Verfasst: Samstag 14. August 2010, 17:08
von lutz.horn
Ist das eine Frage oder eine Feststellung? Bei mir (Python 2.6) funktioniert mein obiges Beispiel einwandfrei.
Re: TXT Datei bewachen
Verfasst: Samstag 14. August 2010, 17:09
von sttrader
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

Re: TXT Datei bewachen
Verfasst: Samstag 14. August 2010, 17:12
von BlackJack
@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.
Re: TXT Datei bewachen
Verfasst: Samstag 14. August 2010, 17:17
von sttrader
Danke für den Hinweis werde dies in Zukunft besser beachten.