我试图在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()
我有一个气象站以无线方式向raspberry pi发送数据,我只想让文件保留一行当前数据。现在它只是不断循环并一遍又一遍地添加。任何帮助将不胜感激..
答案 0 :(得分:3)
我会将您的代码更改为:
from serial import Serial
with Serial('/dev/ttyUSB0',57600) as port:
while True:
with open('wxdata', 'w') as file:
file.write(port.read())
这将确保它被截断,刷新等等。为什么你不必做的工作? :)
答案 1 :(得分:1)
默认情况下,truncate()
仅将文件截断为当前位置。对于你的循环,第一次只有0。将你的循环改为:
while 1:
outf.seek(0)
outf.truncate()
outf.write(ser.read())
outf.flush()
请注意truncate()
接受一个可选的大小参数,你可以传递0,但是你仍然需要在写下一个部分之前回到开头。
答案 2 :(得分:0)
在开始编写文件之前,请添加以下行:
outf.seek(0)
outf.truncate()
这将使得下次写的任何内容都会覆盖文件