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

我试图用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()

我有一个气象站无线发送数据到一个树莓圆周率,我只希望该文件保持一行当前收到的数据。现在它只是不断地循环和添加。非常感谢您的帮助。

在开始编写文件之前,请添加以下行:

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,是的,谢谢。我在没有仔细阅读的情况下复制粘贴;-)