Seite 1 von 1

Zeitgleiches lesen und schreiben in eine txt datei

Verfasst: Montag 13. September 2010, 08:34
von Pretender2k
Hallo Leute,

ich hab folgendes Problem. Ich erhalte von einem Sensor Daten, die auf meinem PC jede sekunde in eine TXT_File1 Datei geschrieben werden. Diese Messwerte lese ich ueber eine while schleife jede Sekunde in mein Python Programm ein, lass die durch einen von mir geschriebenen Algorithmus laufen und schreib das Ergebnis wiederum jede Sekunde in eine neue TXT_File2 Datei. Aus dieser TXT_File2 Datei liest nun wiederum ein weiterer Algorithmus die Ergebnisse und visualisiert diese auf meinem Bildschirm.

SensorProgram -> TXT_File1 -> PythonCode -> TXT_File2 -> Visualisierung

Das SensorProgram schreibt hierbei in die TXT_File1 und mein Python Program liest nur aus dem TXT_File1. Das funktioniert auch reibungslos. Problematisch wird es aber dann, wenn mein PythonCode in das TXT_File2 schreibt. Hier gibt es immer mal wieder Konflikte und das PythonProgram schmiert mir ab. Das Program fuer die Visualisierung laeuft aber weiterhin. Mein Code schaut so aus:

Code: Alles auswählen

    def WriteFile(self, DataEstimatorFile, WriteData):
        WriteString = strftime("%Y-%m-%d %H:%M:%S", localtime())
        for i in WriteData:
            WriteString = WriteString + " , " + str(i)
        WriteFile = file(DataEstimatorFile, "w+")
        WriteFile.write(WriteString)
        WriteFile.close()
Der Fehler ist:

Code: Alles auswählen

IOError: [Errno 13] Permission denied: 'c:\\Data.txt'
Fuer DataEstimatorFile erhaelt die Funktion "c:\Data.txt" und fuer WriteData einen String in dem meine Ergebnisse stehen. Im Visualisierungsprogram, welches aus TXT_File2 liest, ist auch angegeben, dass ein weiteres Program lese und schreibzugriff hat.

Weiss jemand was ich vielleicht falsch mache bzw. wo das Problem liegt?

Re: Zeitgleiches lesen und schreiben in eine txt datei

Verfasst: Montag 13. September 2010, 09:08
von /me
Pretender2k hat geschrieben:

Code: Alles auswählen

    def WriteFile(self, DataEstimatorFile, WriteData):
        WriteString = strftime("%Y-%m-%d %H:%M:%S", localtime())
        for i in WriteData:
            WriteString = WriteString + " , " + str(i)
        WriteFile = file(DataEstimatorFile, "w+")
        WriteFile.write(WriteString)
        WriteFile.close()
Zwei ungute Sachen fallen mir auf:
[*] WriteFile ist der Name der Funktion, du weist allerdings den Rückgabewert von file() einem gleichnamigen Bezeichner zu.
[*] Statt file() sollte man open() zum Öffnen verwenden.

Kann es sein, dass das Programm mehrfach zur gleichen Zeit läuft?

Re: Zeitgleiches lesen und schreiben in eine txt datei

Verfasst: Montag 13. September 2010, 09:35
von BlackJack
@Pretender2k: Es könnte auch sein, dass das Visualisierungsprogramm genau in dem Moment auf die Datei zugeift. Oder ein Virenscanner. Oder ein Indexierungsprogramm was sich den Inhalt der Textdatei anschaut.

Ich würde die Datei nicht immer wieder neu öffnen, sondern nur einmal. Und dann nach dem `write()` ein `flush()`, damit die Daten auch wirklich sofort geschrieben werden.

Re: Zeitgleiches lesen und schreiben in eine txt datei

Verfasst: Montag 13. September 2010, 10:00
von Pretender2k
Was ist denn der Vorteil wenn ich die Datei nur einmal Oeffne? Also prinzipiell, kannn es denke ich schon vorkommen, das beide Programme mal zum gleichen Zeitpunkt auf die Datei zugreifen wollen. Gbits da irgendwie ne moeglichkeit, dass dann eines Wartet bis man wieder auf die Datei zugreifen kann?

Re: Zeitgleiches lesen und schreiben in eine txt datei

Verfasst: Montag 13. September 2010, 11:33
von BlackJack
@Pretender2k: Der Vorteil ist, dass Du die Nachteile nicht hast. Die Ausnahme die Du Da bekommst zum Beispiel.

Re: Zeitgleiches lesen und schreiben in eine txt datei

Verfasst: Montag 13. September 2010, 13:44
von Pretender2k
Wenn ich die Datei also einmal nur oeffne und die anderen Programme da fleissig draus lesen stoert mich das in python weniger, als wenn ich die datei mit python oeffne den Inhalt aendere und wieder schliesse? Hab ich das richtig verstanden?

EDIT: Hab das gerade mal getestet und es folgt das naechste Problem. Wenn ich die Datei nur einmal oeffne hab ich keine ahnung wie ich immer in die erste Zeile schreibe. Momentan wird bei jedem schreibvorgang die Infos hinten drangehaengt. Das moechte ich aber nicht. Die Ausgangswerte sollten immer nur in einer Zeile stehen.

Re: Zeitgleiches lesen und schreiben in eine txt datei

Verfasst: Montag 13. September 2010, 23:02
von Leonidas
Du kannst mit ``fileobjekt.seek(0)`` an den Anfang der Datei springen.

Re: Zeitgleiches lesen und schreiben in eine txt datei

Verfasst: Montag 13. September 2010, 23:20
von BlackJack
Dann darf man aber nicht vergessen eventuelle Reste einer längeren, älteren Zeile mit def `truncate()`-Methode zu entfernen, oder das vor dem schreiben zu tun. Allerdings erscheint mir das alles ein wenig zerbrechlich. Was ist denn wenn das Visualisierungprogramm gerade dann liest, wenn Du am schreiben bist. Das sind ja alles keine garantierten atomaren Operationen.

Re: Zeitgleiches lesen und schreiben in eine txt datei

Verfasst: Dienstag 14. September 2010, 10:28
von Pretender2k
Also insgesmat ist das natuerlich nicht die beste Loesung was ich da betreibe, aber ist es vielleicht moeglich einfach die Fehlermeldung zu ignorieren und den Lesevorgang erneut zu starten oder default werte zurueckzugeben? Insgesamt tritt der Fehler naemlich sehr sehr selten auf!

Re: Zeitgleiches lesen und schreiben in eine txt datei

Verfasst: Dienstag 14. September 2010, 10:42
von BlackJack
@Pretender2k: Das ist ja eine ganz normale Ausnahme bei der man natürlich auch mit der ganz normalen Ausnahmebehandlung arbeiten kann.