我试图编写一个代码,我可以从模拟传感器获取数据,并希望将数据写入.txt文件。我做了一些研究并编写了这段代码 -
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import spidev
import time
spi = spidev.SpiDev()
spi.open(0, 0)
datafile = file.open("temperature.txt", "w")
def ReadChannel(channel):
adc = spi.xfer2([1, 8+channel <<4, 0])
data = ((adc[1]& 3) << 8) + adc[2]
return data
def ConvertVolts(data, places):
volts = (data*3.3)/float(1023)
volts = round(volts, places)
return volts
def ConvertTemp(data, places):
temp = ((data*200)/float(1023))-50
temp = round(temp, places)
return temp
temp_channel = 0
delay = 5
while True:
temp_level = ReadChannel(temp_channel)
temp_volts = ConvertVolts(temp_level, 2)
temp = ConvertTemp(temp_level, 2)
print"Temperature (deg F): ", temp
datafile.write(str(temp)+"\n")
time.sleep(delay)
datafile.close()
但是当我运行这段代码时,它会形成一个文件&#34; temperature.txt&#34;没有文字。有人可以指出我的错误吗?如果有帮助,我从以下网站获得了一些灵感 - https://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/temperature/step10.py http://www.raspberrypi-spy.co.uk/2013/10/analogue-sensors-on-the-raspberry-pi-using-an-mcp3008/ 提前致谢
答案 0 :(得分:0)
我认为你的文件输出流永远不会被刷新到磁盘,因为你只是写入文件但是然后用control-c结束循环,对吗?
也许尝试让循环运行10次并关闭文件,然后尝试。 您是否获得了正确的打印温度输出?
答案 1 :(得分:0)
为什么不使用构建日志记录功能?然后它看起来像这样!
import logging
logging.basicConfig(filename=PATHTOFILE, loglevel=logging.INFO)
然后你可以:
logging.info("TEXTTOWRITETOTHEFILEHERE")
而不是datafile.write(......) 它将附加到文件(如果存在)并向其添加日期/时间。它也会处理文件,例如。 close()等。 不应该需要延迟!
答案 2 :(得分:0)
更改行:
datafile = file.open("temperature.txt", "w")
对此:
datafile = open("temperature.txt", "w")
因为它现在对我有用。如果仍未写入文件,请检查传感器数据的获取。如果 temp 变量正确打印,请阅读以下内容。
出于您的目的,最好使用 with 关键字, 因为它包括.close()甚至try / finally块(非常适合循环公式)。您可能需要使用“ a”模式添加数据,然后使用“ w”模式重写数据:
while True:
#read temp here
with open("temperature", "a") as datafile:
datafile.write(temp)
而不是不太一致:
datafile = open("temperature.txt", "w")
while True:
#temp here
datafile.write(temp)
datafile.close()
实际上从不关闭文件...