在python中覆盖文件

时间:2014-11-21 22:54:41

标签: 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()
           outf.write(ser.read))
           outf.flush()

我有一个气象站以无线方式向raspberry pi发送数据,我只想让文件保留一行当前数据。现在它只是不断循环并一遍又一遍地添加。任何帮助将不胜感激..

3 个答案:

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

这将使得下次写的任何内容都会覆盖文件