2014-11-21 18 views
6

Ich versuche, eine Datei in Python zu überschreiben, so dass nur die aktuellsten Informationen von einem seriellen Port gelesen werden. Ich habe verschiedene Methoden ausprobiert und einige verschiedene Beiträge gelesen, aber die Datei schreibt die Informationen immer wieder neu, ohne den vorherigen Eintrag zu überschreiben.Überschreiben einer Datei in Python

import serial 

ser=serial.Serial('/dev/ttyUSB0',57600) 

target=open('wxdata' , 'w+') 

with ser as port, target as outf: 
     while 1: 
      target.truncate() 
      outf.write(ser.read)) 
      outf.flush() 

Ich habe eine Wetterstation senden Daten drahtlos zu einem Raspberry Pi, ich möchte nur die Datei eine Zeile der aktuellen Daten erhalten erhalten. Gerade jetzt bleibt es immer in Schleifen und fügt immer wieder hinzu. Jede Hilfe wäre sehr geschätzt ..

+0

Öffnen Sie die Datei in der Schleife, wenn Sie jedes Mal überschreiben oder 'file.seek (0) file.truncate (0) file.write' –

+0

Sie fehlen auch Parens auf' ser.read' 'ser .read() ' –

Antwort

0

Bevor Sie mit dem Schreiben der Datei zu starten, fügen Sie die folgende Zeile:

outf.seek(0) 
outf.truncate() 

Dadurch wird es so, dass, was Sie als nächstes schreiben die Datei

+0

Vorsicht mit diesem im Allgemeinen - wenn das, was Sie als nächstes schreiben, kürzer ist als das, was vorher war, wird nur der Anfang der Datei überschrieben! Der Aufruf von 'truncate()' ist ebenfalls notwendig. – Cameron

+0

Danke für den Tipp! –

1

überschreiben Durch Standardmäßig schneidet truncate() nur die Datei auf die aktuelle Position ab. Welches, mit deiner Schleife, ist nur bei 0 das erste Mal durch. Ändern Sie Ihre Schleife:

while 1: 
    outf.seek(0) 
    outf.truncate() 
    outf.write(ser.read()) 
    outf.flush() 

Beachten Sie, dass truncate() akzeptieren tut eine optionale Größe Argument, das Sie 0 für passieren könnte, aber Sie müssten noch suchen, zurück an den Anfang, bevor Sie den nächsten Teil zu schreiben sowieso.

+0

'outf.write (ser.read())' –

+0

@Padraic: Hmm, ja danke. Ich kopiere eingefügt, ohne zu nah zu lesen ;-) – Cameron

+0

danke für den Hinweis, es macht Sinn !!! –

3

Ich würde Ihr Code ändern aussehen:

from serial import Serial 

with Serial('/dev/ttyUSB0',57600) as port: 
    while True: 
     with open('wxdata', 'w') as file: 
      file.write(port.read()) 

Dies wird es wird abgeschnitten stellen Sie sicher, gespült, etc. Warum Sie müssen nicht arbeiten? :)

Verwandte Themen