2014-11-21 10 views
6

bir dosya üzerine yazma. Birkaç farklı yöntem denedim ve birkaç farklı gönderi okudum ama dosya, önceki girdinin üzerine yazarak bilgileri tekrar tekrar yazmaya devam ediyor.sadece bir seri port okunan en güncel bilgiyi tutar böylece Python bir dosya yazmak aşırı çalışıyorum piton

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() 

ben ahududu pi kablosuz veri gönderen bir hava istasyonu var, ben sadece dosya alınan akım verilerinin bir satır devam etmek istiyorum. Şu anda sadece döngüde ve tekrar tekrar ekliyor. Herhangi bir yardım büyük takdir .. dosyayı yazmaya başlamadan önce

+0

Her seferinde üzerine yazmak isterseniz, döngüdeki dosyayı açın veya 'file.seek (0) file.truncate (0) file.write' –

+0

Ayrıca" ser.read'' ser "de parens eksik .read() ' –

cevap

0

, aşağıdaki satırı ekleyin: ne olursa olsun dosyanın üzerine yazmak sonraki yazma böylece

outf.seek(0) 
outf.truncate() 

Bu yapacaktır

+0

Genel olarak buna dikkat edin - eğer yazdıklarınız daha önce var olandan daha kısasa, sadece dosyanın başlangıcının üzerine yazılır! Truncate() 'için çağrı da gereklidir. – Cameron

+0

Bahşiş için teşekkürler! –

1

tarafından varsayılan, truncate() sadece mevcut konumda dosyayı keser. Hangi, senin döngüsünde, sadece ilk defada. truncate() için 0 geçebileceği isteğe bağlı bir boyut argümanı, kabul etmemektedir

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

Not olduğunu, ama yine de zaten sonraki kısmını yazmadan önce başlangıca geri aramak gerekir: için döngü değiştirin.

+0

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

+0

@Padraic: Hmm, evet teşekkürler. Ben çok yakından okumadan yapıştırılan kopyalayın ;-) – Cameron

+0

tavsiye için teşekkürler! –

3

ben şöyle görünecek şekilde kodunu değiştirmek olacaktır:

from serial import Serial 

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

Bu vs. kızardı, kesiliyorsa Neden gerekmez çalışır sağlayacağız? :)

İlgili konular