从.csv文件的最后一行获取值

从.csv文件的最后一行获取值,csv,python-3.x,Csv,Python 3.x,我正在登录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 第[0]行获取日期,第[1]行获取温度和第[2]行湿度 从文件的最后一行获取温度和湿度值的最快方法是什么(即最后记

我正在登录
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
第[0]行
获取日期,
第[1]行
获取温度和
第[2]行
湿度

从文件的最后一行获取温度和湿度值的最快方法是什么(即最后记录的温度和湿度值)?在这种情况下,
09:40

@编辑:记录器在Raspberry Pi 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
s方法来实现。中的注释解释了其工作原理:

打印文件FD末尾的最后N_行。倒退 通过文件,一次读取'BUFSIZ'字节(可能除外 第一个),直到我们到达文件的开头或读取了编号 新行。START_POS是读取指针的起始位置 对于与FD关联的文件(可能为非零)。结束位置是 EOF的文件偏移量(比最后一个字节的偏移量大一个)。返回 如果成功,则为true


这个问题基本上是,再加上对最后一行的解析,@PeterS Cool。我想知道
deque
解决方案是否会从头到尾读取整个文件。现在这可能不是问题,但如果文件大量增长,
tail
具有向后读取的优势。From:“向后浏览文件,一次读取'BUFSIZ'字节(可能第一个除外),直到我们到达文件的开头或读取了一些换行符。”是的,我不确定它是否会读取整个文件。现在它运行得非常快(文件中有20000行,大约2周的测量),当我的pi无法处理它时,我可能不得不切换到您的版本:-)谢谢
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:]]