2014-11-21 20 views
6

Sto cercando di sovrascrivere un file in python in modo da mantenere solo le informazioni più aggiornate lette da una porta seriale. Ho provato diversi metodi e ho letto parecchi post diversi ma il file continua a scrivere le informazioni ripetutamente senza sovrascrivere la voce precedente.Sovrascrittura di un file 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() 

ho una stazione meteo invio di dati in modalità wireless a un PI lampone, voglio solo il file per mantenere una riga di dati correnti ricevuti. in questo momento continua a scorrere e aggiungere continuamente. Qualsiasi aiuto sarebbe molto apprezzato ..

+0

aprire il file nel ciclo se si desidera sovrascrivere ogni volta o 'file.seek (0) file.truncate (0) file.write' –

+0

Anche mancano paren su' ser.read' 'ser .read() ' –

risposta

0

Prima di iniziare a scrivere il file, aggiungere la seguente riga:

outf.seek(0) 
outf.truncate() 

Questo farà in modo che ciò che si scrive prossima sarà sovrascrivere il file

+0

Attenzione a questo in generale - se quello che scrivi dopo è più corto di quello che c'era prima, solo l'inizio del file verrà sovrascritto! Anche la chiamata a 'truncate()' è necessaria. – Cameron

+0

Grazie per il suggerimento! –

1

By per impostazione predefinita, truncate() tronca il file nella posizione corrente. Che, con il tuo loop, è solo a 0 la prima volta. Cambia la tua loop:

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

Nota che truncate() non accetta un argomento opzionale dimensioni, che si potrebbe passare 0 per, ma si sarebbe ancora bisogno di cercare di nuovo all'inizio prima di scrivere la parte successiva comunque.

+0

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

+0

@Padraic: Hmm, sì grazie. Copio incollato senza leggerlo troppo da vicino ;-) – Cameron

+0

grazie per il consiglio ha senso !!! –

3

vorrei cambiare il codice a guardare come:

from serial import Serial 

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

Questo farà in modo che venga troncato, arrossato, ecc Perché lavorare non è necessario? :)