在python中覆盖文本文件

时间:2013-12-29 10:49:50

标签: python serial-port arduino

我正在使用此代码从串行端口读取值并将其写入文本文件

 import serial
    ser = serial.Serial("/dev/ttyUSB0", 9600)
    text_file = open("output.txt", 'w')
    while ser.read():
         x=ser.read()
         print(x)    
         text_file.write(x)
         text_file.flush()
    text_file.close()
    ser.close()

此代码正常工作,值将附加在文本文件中。有没有办法在串行接收每个值时覆盖文本文件,即只需要将最后一个值存储在文本文件中。 ser.read()创建一个无限循环,因此停止代码的唯一方法是使用键盘中断(ctrl + z),但在使用它时,文本文件和串行连接保持未闭合状态,我该如何解决?

2 个答案:

答案 0 :(得分:3)

您可以在写入之前截断文件。这样,当您按照要求顺序接收每个值时,它将坚持存储值。略微修改代码,

import serial
ser = serial.Serial("/dev/ttyUSB0", 9600)
text_file = open("output.txt", 'w')
while ser.read():
     x=ser.read()
     print(x)
     test_file.seek(0)
     text_file.truncate()    
     text_file.write(x)
     text_file.flush()
text_file.close()
ser.close()

这样您的文件将保持最新值 - 请使用tail -F otuput.txt进行检查。

答案 1 :(得分:2)

from serial import Serial
with (open("output.txt", 'w'), Serial("/dev/ttyUSB0", 9600)) as text_file, ser:
     while ser.read():
          x=ser.read()
          print(x)    
     text_file.write(x)