在python中覆盖文件
我试图用python重写一个文件,这样它只保存从串口读取的最新信息。我尝试了几种不同的方法,读了很多不同的文章,但是文件不断地重复写信息,没有覆盖前面的条目在python中覆盖文件,python,file-io,overwrite,Python,File Io,Overwrite,我试图用python重写一个文件,这样它只保存从串口读取的最新信息。我尝试了几种不同的方法,读了很多不同的文章,但是文件不断地重复写信息,没有覆盖前面的条目 import serial ser=serial.Serial('/dev/ttyUSB0',57600) target=open( 'wxdata' , 'w+' ) with ser as port, target as outf: while 1: target.truncate()
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()
我有一个气象站无线发送数据到一个树莓圆周率,我只希望该文件保持一行当前收到的数据。现在它只是不断地循环和添加。非常感谢您的帮助。在开始编写文件之前,请添加以下行:
outf.seek(0)
outf.truncate()
这样,无论您接下来写什么,都会覆盖文件。默认情况下,truncate()
只会将文件截断到当前位置。在循环中,第一次通过时仅为0。将循环更改为:
while 1:
outf.seek(0)
outf.truncate()
outf.write(ser.read())
outf.flush()
请注意,
truncate()
确实接受一个可选的大小参数,您可以将其传递0,但在编写下一部分之前,您仍然需要返回到开头。我会将您的代码更改为:
from serial import Serial
with Serial('/dev/ttyUSB0',57600) as port:
while True:
with open('wxdata', 'w') as file:
file.write(port.read())
这将确保它被截断、刷新等。为什么不必工作?:) 通常要小心——如果您接下来编写的内容比之前的内容短,则只会覆盖文件的开头!调用
truncate()
也是必要的。如果每次都要覆盖file.seek(0)file.truncate(0)file.write,则在循环中打开该文件。您还缺少ser.read
ser.read()
@Padraic:Hmm,是的,谢谢。我在没有仔细阅读的情况下复制粘贴;-)