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

时间:2016-04-07 09:13:23

标签: 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

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]))

现在我从最后一行获得温度值....

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的文件偏移量(一个大于最后一个字节的偏移量)。返回   如果成功,则为真。