如何将Raspberry Pi+Sense Hat测得的温湿度、气压数据追加写入文件
问题原因
你将变量名放在了引号内部,Python会将引号包裹的内容全部识别为普通字符串,不会解析为对应变量的值。
原有代码问题修正
你的现有代码还存在几个需要调整的点:
- 存在两个独立死循环,第二个休眠逻辑永远不会执行,采集频率不符合每分钟一次的需求
- 变量赋值错位:气压值赋给了温度变量,温度值赋给了气压变量,会导致采集数据完全错误
- 重复导入
time、sleep模块,且每次循环都重复实例化SenseHat对象,浪费资源 - 手动开关文件容易出现资源泄露,推荐使用
with上下文管理器自动处理文件操作
完整可运行代码
from sense_hat import SenseHat from time import time, sleep, strftime, localtime # 全局实例化一次SenseHat即可 sense = SenseHat() while True: # 每分钟整点触发采集 sleep(60 - time() % 60) # 采集并保留1位小数,变量对应正确 temp = round(sense.get_temperature(), 1) pressure = round(sense.get_pressure(), 1) humidity = round(sense.get_humidity(), 1) # 终端打印+屏幕滚动显示 print(f"温度:{temp}℃ 气压:{pressure}hPa 湿度:{humidity}%") show_msg = f"Temperature: {temp} Pressure: {pressure} Humidity: {humidity}" sense.show_message(show_msg, scroll_speed=0.05) # 追加写入文件,新增时间戳方便后续追溯 collect_time = strftime("%Y-%m-%d %H:%M:%S", localtime()) with open("sensedata.txt", "a", encoding="utf-8") as f: # 每行记录格式:采集时间,温度,气压,湿度 f.write(f"{collect_time},{temp},{pressure},{humidity}\n")
关键逻辑说明
- 字符串拼接采用f-string语法,变量放在
{}中即可自动解析为对应的值,不需要放入引号内部 - 如果你习惯用原始的字符串拼接写法,写入行也可以替换为:
f.write(collect_time + "," + str(temp) + "," + str(pressure) + "," + str(humidity) + "\n") with语句执行完成后会自动关闭文件,不需要手动调用close()方法- 生成的
sensedata.txt可以直接用Excel等表格工具打开做后续数据分析
内容的提问来源于stack exchange,提问作者speedee_doge
相关产品推荐
相关产品推荐

