在Python中覆盖文件
我想在Python中写一个文件,所以它只保留从串口读取的最新信息。我已经尝试了几种不同的方法,并阅读了很多不同的文章,但是文件不断重复写入信息而不覆盖之前的条目。在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()'的调用也是必需的。 – Cameron 2014-11-21 23:00:05
感谢您的提示! – 2014-11-22 00:51:02
通过默认,truncate()
只会将文件截断为当前位置。在你的循环中,第一次通过时只有0。你的循环更改为:
while 1:
outf.seek(0)
outf.truncate()
outf.write(ser.read())
outf.flush()
注意truncate()
不会接受一个可选的尺寸参数,它你可以为传递0,但你仍然需要写反正在下部分之前寻求回到开头。
'outf.write(ser.read())' – 2014-11-21 23:06:52
@Padraic:恩,谢谢。我复制粘贴没有读得太紧密;-) – Cameron 2014-11-21 23:09:29
感谢您的意见,它是有意义的! – 2014-11-23 15:26:26
我会改变你的代码看起来像:
from serial import Serial
with Serial('/dev/ttyUSB0',57600) as port:
while True:
with open('wxdata', 'w') as file:
file.write(port.read())
这将确保它被截断,刷新等为什么工作,你不就得了? :)
在循环中打开文件,如果你想覆盖每次或'file.seek(0)file.truncate(0)file.write' – 2014-11-21 23:03:50
你也缺少'ser.read' serre上的parens .read()' – 2014-11-21 23:05:26