2016-09-09 8 views
1

私はPythonでコーディングするのがかなり新しく、このサイトで利用できる素晴らしいリソースのおかげで、これまでのところほとんどの問題を解決することができました。datetimeとdatetimeの範囲を比較する

複数の.csvファイルを取り込み、各初期ファイルのデータをさまざまな種類のログファイルに分割し、これらのさまざまな種類のログを独自の.csvに書き込みます。

私はファイルAをロールスルーする必要があります。そして、各行に対して、同じ日時のためにdatetimeとsearchファイルBを取得し、関連データを初期データとともに新しい列にコピーします。これは、A == B forループの場合にはうまく簡単です...これらのログは、時間の経過とともにリアルタイムクロックが変動する別のコンピュータによって書き込まれます。 私が実際に望むのは、ファイルAから時間をとり、ファイルB +/- 30秒で対応する時間を検索することです。これは、私が立ち往生している場所で、最後の3/4時間、円で周りを囲んでいます!

現在、私は以下のコードの抽出を実行したとき、私は、次を得る:

---> 35(タイムコード - マージン)の場合< = datetime.datetime.date(ssptime)< =(タイムコード+マージン):

TypeError例外:事前にdatetime.date

おかげへのdatetime.datetimeを比較することはできません!

import matplotlib.pyplot as plt # external function need from inside Canopy 
import os # external functions 
import re # external functions 
import matplotlib.patches as mpatches 
import csv 
import pandas as pd 
import datetime 


addrbase = "23" 
csvnum = [1,2,3,4,5] # CSV number 
csvnum2 = [1,2,3,4,5] 
senstyp = ['BSL'] #Sensor Type 
Beacons = 5 





outfile = open('C:\Users\xxx\Canopy\2303_AVG2.csv', 'w') #File to write to 
outcsv = csv.writer(outfile, lineterminator='\n') 

with open('C:\Users\xxx\Canopy\2303_AVG.csv', 'r') as f: #File read vairable f 
    csvread = csv.reader(f, delimiter=',') #Stores the data from file location f in csvread using the delimiter of',' 
    for row in csvread: #sets up a for loop using the data in csvread 
     timecode = datetime.datetime.strptime(row[1],'%Y/%m/%d %H:%M:%S')#BSL time to datetime.datetime 
     margin = datetime.timedelta(seconds = 30) 

     with open('C:\Users\xxx\Canopy\2301_SSP_AVG.csv', 'r') as f: #File read vairable f 
      csvreadssp = csv.reader(f, delimiter=',') 
      for line in csvreadssp: 
       ssptime = datetime.datetime.strptime(row[2],'%Y/%m/%d %H:%M:%S')# 
       print ssptime 
       if (timecode - margin) <= datetime.datetime.date(ssptime) <= (timecode + margin): 
        relssp = line[6] 
        print "Time: " + str(timecode) + " SSP: " + str(relssp) 
     #try: 
        row.append(relssp) #Calculates the one way travel time of the range and adds a new column with the data 
        outcsv.writerow(row) # Writes file 
     #except ValueError: #handles errors from header files 
     # row.append(0) #handles errors from header files 
outfile.flush()   
outfile.close()  
print "done" 

答えて

2

あなたは全体の一日を表しdateに、特定の時点を表すdatetimeを比較することはできません。日付は何時に表示されるべきですか?

ssptimeはすでにdatetimeです(これはstrptimeが返すものです) - なぜあなたはdateに電話していますか?これは動作するはずです:

if (timecode - margin) <= ssptime <= (timecode + margin): 

あなたの時間はすべて秒の精度まで、あなたもこれを行うことができますされているので:

if abs((ssptime - timecode).total_seconds()) < margin: 

私は明確であるか分からない - 私はおそらくの方に傾くだろう秒。

+1

はい。 Date/datetimeを表すとき、日付、時刻、datetime、timedelta、tzinfoの各クラスがあります。同じクラスに対してのみ比較操作を行うことができます。そうでなければ、TypeErrorが発生します。 Pythonの日付タイプのドキュメントを参照してください。https://docs.python.org/2/library/datetime.html – rojeeer