Python温度记录仪程序新建CSV文件添加列标题异常问题求助
问题原因
你当前的重复表头问题是因为写表头的逻辑被放在了start()函数的无限while循环内,且每次循环都会将变量x重置为1,if x >= 1的判断每次循环都会触发,因此每写入一行温度数据就会多追加一次表头。
同时你原有代码存在多次重复打开文件未关闭的问题,容易引发IO缓存写入失败的隐患。
修正方案
你只需要把表头写入逻辑移到循环外,在首次创建CSV文件时完成写入即可,同时可以通过判断文件是否为空来避免程序重启时重复写入表头。修正后的代码如下:
import datetime import time import os # 假设THERMO是你已初始化的传感器对象 # 生成带时间戳的文件名 datetime1 = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") extension = ".csv" file_name = f"{datetime1}{extension}" header = "Date,Time,Minutes,InletTemp,ControlTemp,BedTemp,OutletTemp" # 首次写入表头:判断文件是否存在且为空 if not os.path.exists(file_name) or os.path.getsize(file_name) == 0: with open(file_name, 'w', encoding='utf-8') as f: f.write(header + '\n') # start按钮函数 def start(): # 记录程序启动时间用于计算运行分钟数 start_time = datetime.datetime.now() while True: # 采集传感器数据 t1 = THERMO.getTEMP(0,1) t2 = THERMO.getTEMP(0,2) t3 = THERMO.getTEMP(0,3) t4 = THERMO.getTEMP(0,4) # 温控板LED切换 THERMO.toggleLED(0) # 处理时间字段,匹配表头格式 current_time = datetime.datetime.now() date_str = current_time.strftime("%Y-%m-%d") time_str = current_time.strftime("%H:%M:%S") run_minutes = round((current_time - start_time).total_seconds() / 60, 2) # 拼接数据行 data = f"{date_str},{time_str},{run_minutes},{t1},{t2},{t3},{t4}" # 追加写入文件 with open(file_name, 'a', encoding='utf-8') as f: f.write(data + '\n') # 控制台输出 print(str(current_time)) print('Temperature on Channel 1:', t1) print('Temperature on Channel 2:', t2) print('Temperature on Channel 3:', t3) print('Temperature on Channel 4:', t4) time.sleep(1) # 启动函数 if __name__ == "__main__": start()
优化说明
- 用
with上下文管理器自动处理文件打开关闭,避免资源泄漏 - 拆分了日期、时间字段,匹配你预设的表头结构,新增了运行分钟数的计算逻辑
- 新增了文件存在性和空文件判断,即使程序中断重启也不会重复写入表头
- 文件名使用格式化字符串生成,避免空格等特殊字符导致的读取异常
内容的提问来源于stack exchange,提问作者pequalsmv
相关产品推荐
相关产品推荐

