我编写了一个小程序,每个小步舞曲从两件设备中读取值,然后将其保存到 .csv 文件中。我希望在每次收集每个点后更新和保存文件,这样如果电脑崩溃或发生其他问题,就不会发生数据丢失。为此,我打开文件(ab 模式),使用写入行并循环关闭文件。集合之间的时间约为 1 分钟。这工作得很好,但问题是在数据收集 5-6 小时后,它停止保存到 .csv 文件,并且没有出现任何错误,代码继续运行,图形正在更新,就像什么都没发生一样,但打开.csv 文件显示数据丢失。我想知道我使用的代码是否有问题。我也不应该从中运行一个进行实时绘图的子进程,
##Initial file declaration and header
with open(filename,'wb') as wdata:
savefile=csv.writer(wdata,dialect='excel')
savefile.writerow(['System time','Time from Start(s)','Weight(g)','uS/cm','uS','Measured degC','%/C','Ideal degC','/cm'])
##Open Plotting Subprocess
draw=subprocess.Popen('TriPlot.py',shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE)
##data collection loop
while True:
Collect Data x and y
Waits for data about 60 seconds, no sleep or pause commoand used, pyserial inteface is used.
## Send Data to subprocess
draw.stdin.write('%d\n' % tnow)
draw.stdin.write('%d\n' % s_w)
draw.stdin.write('%d\n' % tnow)
draw.stdin.write('%d\n' % float(s_c[5]))
##Saving data Section
wdata=open(filename,'ab')
savefile=csv.writer(wdata,dialect='excel')
savefile.writerow([tcurrent,tnow,s_w,s_c[5],s_c[7],s_c[9],s_c[11],s_c[13],s_c[15]])
wdata.close()
PS 此代码使用以下包用于未显示的代码。pyserial、csv、os、subprocess、Tkinter、string、numpy、time 和 wx。