2017-08-14 234 views
0

我試圖計算創建和更新文件之前的時間差,以分鐘計算丟失數據的數量。但我無法正確減去它們。我的代碼如下。從python的csv文件的當前日期時間減去日期時間

在文件中的數據是這樣的:

DATE,temp1 
2017-08-14 17:10:01,0.44 
2017-08-14 17:15:01,0.62 
2017-08-14 17:20:01,0.99 
2017-08-14 17:25:01,0.85 
2017-08-14 17:30:01,0.13 
2017-08-14 17:35:01,0.24 
2017-08-14 17:40:02,0.95 
2017-08-14 17:45:01,0.65 

而且代碼:

#!/usr/bin/env python 
# -*-coding:utf-8 -* 
import os 
import sys 
import time 

from time import mktime, strftime, localtime, sleep 
from datetime import datetime, timedelta 

def missing_data(expect, missed): 
. 
. 
. 
. 

def main(): 
    fmt = '%Y-%m-%d %H:%M:%S' 
    with open('/home/kamil/Desktop/sensor1/temp.dat', 'rb') as f: 
     read = f.readlines()[1:] 
     for line in read: 
      line = line.strip().split(',') 
      # print line 
      start_date = line[0] # type is str so i convert it to datetime 
      start_date = datetime.strptime(start_date, fmt) # type is datetime.datetime and here I need the first timestamp in the file only 
      current_time = datetime.now() 
      step_size = 5 
      differ_time = current_time - start_date 
      minutes_values = differ_time.total_seconds()/60 
      print 'minutes_values:::::::::::::::::::', minutes_values 
      missed = int(minutes_values/step_size) 
      expected = ......... 
      missing_data(expected, missed)  


if __name__ == '__main__': 
    main() 

如果我打印minutes_values,它給我的結果是這樣的:

40.755 
35.7553 
30.755 
25.755 
20.755 
15.755 
10.755 
5.755 
0.755 

但我只是需要最後的值,例如40.755在這種情況下。我是編碼新手。有人可以幫助我,在這方面如何獲得單一的價值。

回答

0

首先,創建一個列表來保存minutes_values,然後使用內建的max()來獲得最大值。

def main(): 
    fmt = '%Y-%m-%d %H:%M:%S' 
    with open('/home/kamil/Desktop/sensor1/temp.dat', 'rb') as f: 
     read = f.readlines()[1:] 
     minutes_values = [] 
     for line in read: 
      line = line.strip().split(',') 
      # print line 
      start_date = line[0] # type is str so i convert it to datetime 
      start_date = datetime.strptime(start_date, fmt) # type is datetime.datetime and here I need the first timestamp in the file only 
      current_time = datetime.now() 
      step_size = 5 
      differ_time = current_time - start_date 
      minutes_values.append(differ_time.total_seconds()/60) 
      missed = int(minutes_values/step_size) 
      expected = ......... 
      missing_data(expected, missed) 

    print 'minutes_values:::::::::::::::::::', max(minutes_values) 
+0

它說浮動對象是不可迭代的 –

+0

對不起,我很難測試何時不提供示例數據,否則我會在發佈前測試。請在迴路中的某處打印一份打印minutes_values語句來完整回溯,以幫助進行調試。 – Evan

+0

我犯了一個錯誤。我試過這樣.............. minutes_values = differ_time.total_seconds()/ 60然後minutes_values.append(minutes_values)........它給我這個錯誤int不可迭代。 。所以我說得對。非常感謝您的幫助。 –

0

我也是初學者,但在我看來for循環是不必要的。看起來你只需要循環返回的第一個值(40.755),並且每個連續的值減少5,與步長= 5有關?如果你改變step_size,那麼連續的時間改變那個數量?

如果for循環對於其他東西是必需的,則分開代碼的兩部分:一個計算時間差,一個計算for循環正在做的事情。

+0

如果我刪除for循環,那麼我怎麼能得到第一行的第一個時間戳? –

+0

好吧,它看起來像'read',這些項目是以某種方式索引的,因爲你可以遍歷它們。難道你不知道指定'line.strip()。split()'命令是在line [0]上完成的,還是類似的東西? –