我正在登录DataLogging.csv
温度和湿度:
2016-04-07 09:36 16.0 48.7
2016-04-07 09:37 16.0 48.7
2016-04-07 09:38 16.0 48.7
2016-04-07 09:39 16.1 48.8
2016-04-07 09:40 16.1 48.7
row[0]
获取日期,row[1]
临时和row[2]
湿度
从文件的最后一行获取温度和湿度值的最快方法是什么(那些最后记录的那些)?在这种情况下,09:40
值
@Edit:Logger在Raspberry Pi 2上运行
我找到了这个方法:( Stackoverflow Link)
from collections import deque
import csv
def get_last_row(csv_filename):
with open(csv_filename, 'rb') as f:
return deque(csv.reader(f), 1)[0]
lastline = ', '.join(get_last_row('DataLogger.csv'))
values = lastline.split("\t")
print ((values[1]))
现在我从最后一行获得温度值....
答案 0 :(得分:2)
我认为你是在Unix-y系统上,所以像这样的简单应该可以工作+它很快,因为它不会读取整个文件:
import subprocess
last_line = subprocess.check_output(["tail", "-1", "DataLogging.csv"])
# to get the values (parsing via the csv module seems excessive for one line)
temp_hum = [float(x) for x in last_line.split()[2:]]
使用seek()
的跨平台解决方案可以通过实施tail
方法来实现。 tail
's source code中的评论解释了它的工作原理:
从文件FD的末尾打印最后的N_LINES行。向后走 通过文件,一次读取'BUFSIZ'字节(可能除外) 第一个),直到我们点击文件的开头或已经读过NUMBER 换行。 START_POS是读指针的起始位置 对于与FD关联的文件(可能非零)。 END_POS是 EOF的文件偏移量(一个大于最后一个字节的偏移量)。返回 如果成功,则为真。