在主循环中使用 serial.readline() 清空文件
Empty file by using serial.readline() in the main loop
我一直在尝试发送从串口接收到的数据。我正在使用 serial.readline()
从我的设备读取 ASCII 数据。当我在主循环中使用这个函数时,我可以打印字符串但我不能将它发送到我的输出文件。当我将 readline()
放入循环中时,我的 f.write()
函数不起作用。知道如何解决这个问题吗?
import serial
import csv
ser=serial.Serial('COM6', 9600, 8, parity='N', timeout=2)
with open('output.csv','a') as f:
while True:
line = ser.readline()
if line:
print(line)
f.write(line)
这是我得到的数据,但输出文件中没有任何内容。
0R5,Th=24.3C,Vs=24.2V
0R2,Ta=23.3C,Ua=21.3P,Pa=1026.9H
0R1,Dm=000#,Sm=99.9#
0R5,Th=24.3C,Vs=24.2V
如果缓冲区已满,文件将被刷新,并在您退出 with
块时关闭。
如果您永远处于循环状态,则在缓冲区填满之前不会看到文件中的任何更改。
您可以更改输出文件的缓冲。参见 How often does python flush to a file?
在您的示例中,您可以使用
with open('output.csv', 'a', buffering=0) as f:
我一直在尝试发送从串口接收到的数据。我正在使用 serial.readline()
从我的设备读取 ASCII 数据。当我在主循环中使用这个函数时,我可以打印字符串但我不能将它发送到我的输出文件。当我将 readline()
放入循环中时,我的 f.write()
函数不起作用。知道如何解决这个问题吗?
import serial
import csv
ser=serial.Serial('COM6', 9600, 8, parity='N', timeout=2)
with open('output.csv','a') as f:
while True:
line = ser.readline()
if line:
print(line)
f.write(line)
这是我得到的数据,但输出文件中没有任何内容。
0R5,Th=24.3C,Vs=24.2V
0R2,Ta=23.3C,Ua=21.3P,Pa=1026.9H
0R1,Dm=000#,Sm=99.9#
0R5,Th=24.3C,Vs=24.2V
如果缓冲区已满,文件将被刷新,并在您退出 with
块时关闭。
如果您永远处于循环状态,则在缓冲区填满之前不会看到文件中的任何更改。
您可以更改输出文件的缓冲。参见 How often does python flush to a file?
在您的示例中,您可以使用
with open('output.csv', 'a', buffering=0) as f: