Python-将传感器数据写入文件

时间:2015-03-19 12:45:00

标签: python

我试图编写一个代码,我可以从模拟传感器获取数据,并希望将数据写入.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/ 提前致谢

3 个答案:

答案 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()

实际上从不关闭文件...