2

我正在设置一个温度/湿度传感器并编写了一个 while 循环来将数据记录在一个单独的文件中。我试图将写入更改为追加,但是我的文件仍然只包含最后一个数据点。

file = open('/home/pi/example.txt','a')

file = open('/home/pi/example.txt','w') 

下面的while循环

import Adafruit_DHT
from time import sleep
from datetime import datetime

# Sensor should be set to Adafruit_DHT.DHT11,
sensor = Adafruit_DHT.DHT11

# Example using a Raspberry Pi with DHT sensor connected to GPIO4.
pin = 4

# Try to grab a sensor reading.  Use the read_retry method which will retry up
# to 15 times to get a sensor reading (waiting 4 seconds between each retry).
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)


while True:
        if humidity is not None and temperature is not None:
                print (datetime.now()),('Temp={0:0.1f}*F  Humidity={1:0.1f}%'.format(temperat$
                temphumid = (datetime.now()),('Temp={0:0.1f}*F  Humidity={1:0.1f}%'.format(te$
                x = str(temphumid)
                file = open('/home/pi/example.txt','a')         
                file.write(x) 
                file.close()            
                sleep(4)
        else:
                print('Failed to get reading. Try again!')

运行程序时,控制台会显示所有数据,但是我尝试写入的 example.txt 文件仅显示最后一个数据点。我期待一个像下面这样的列表。

2019-07-28 17:28:00.400339 Temp=120.2*F  Humidity=19.0%
2019-07-28 17:28:04.405064 Temp=120.2*F  Humidity=19.0%
2019-07-28 17:28:08.409786 Temp=120.2*F  Humidity=19.0%
2019-07-28 17:28:12.414289 Temp=120.2*F  Humidity=19.0%
2019-07-28 17:28:16.419099 Temp=120.2*F  Humidity=19.0%
2019-07-28 17:28:20.423903 Temp=120.2*F  Humidity=19.0%
2019-07-28 17:28:24.428758 Temp=120.2*F  Humidity=19.0%
2019-07-28 17:28:28.433569 Temp=120.2*F  Humidity=19.0%
2019-07-28 17:28:32.438289 Temp=120.2*F  Humidity=19.0%
2019-07-28 17:28:36.443027 Temp=120.2*F  Humidity=19.0%
2019-07-28 17:28:40.447963 Temp=120.2*F  Humidity=19.0%
2019-07-28 17:28:44.452716 Temp=120.2*F  Humidity=19.0%
2019-07-28 17:28:48.457465 Temp=120.2*F  Humidity=19.0%
2019-07-28 17:28:52.462201 Temp=120.2*F  Humidity=19.0%
4

2 回答 2

1

您可以尝试读取文件并将其添加到字符串中,而不是将新数据连接到文件字符串中,将其写入文件

file = open('file.txt','r+')
file_string = file.read()
new_string = '{}more data\n'.format(file_string)
file.write(new_string)
file.close()
于 2019-07-29T01:04:30.037 回答
0

以下代码解决了原始问题,即每个语句都没有写入文件。此外,它还解决了在第一次方法调用后温度和湿度永远不会更新的未说明问题。

from time import sleep
from datetime import datetime
from pathlib import Path
import Adafruit_DHT

sensor_data = Path('sensor.txt')
if not sensor_data.exists():
    with sensor_data.open('w') as f:
        f.write('time,temp(F),humidity(%)\n')
with sensor_data.open('a') as f:
    try:
        while True:
            humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
            if humidity and temperature:
                time_now = datetime.now()
                temp_hum = (f'{time_now} Temp={temperature:0.2f}\u00b0F Humidity={humidity:0.2f}%')
                print(temp_hum)
                f.write(f'{time_now},{temperature},{humidity}\n')
                sleep(4)
            else:
                print('Failed to get reading. Try again!')
                sleep(4)
    except KeyboardInterrupt:
        pass

代码分解:

  1. if not sensor_data.exists:如果文件不存在,创建它并写一个标题
  2. with open: 不需要close声明
  3. f'string {variable}':现代 f 字符串(python 3.6)
  4. 以易于导入和分析的方式将数据写入文件
  5. try: except将允许您正确退出while循环
于 2019-07-29T01:19:20.933 回答