我一直在環顧四周,我確信答案就在我面前,但我第一次使用日期時間并且有一個問題。這么短的版本是我有一個腳本可以讀取 csv 并查找碼移動的開始和停止時間。我需要把這些時間減去它們,看看花了多長時間。我不確定使用 strptime 是否是正確的方法。我也很困惑為什么我不能從彼此減去 stop_time 和 start_time,即使它們是 datetime.datetime 型別。
import csv
from datetime import datetime, date
start_time = '0'
stop_time ='0'
trailer = '0'
t_time = open('move_times.csv')
t_time_reader = csv.reader(t_time, delimiter=',')
for i in t_time_reader:
if i[2] == 'HOSTLER_COMPLETE':
stop_time = date(datetime.strptime(i[4], '%Y-%m-%d %H:%M:%S'))
trailer = i[11]
elif i[2] == 'HOSTLER_START' and i[11] == trailer:
start_time = date(datetime.strptime(i[4], '%Y-%m-%d %H:%M:%S'))
print(stop_time - start_time)
uj5u.com熱心網友回復:
問題是在第一次迭代中,至少有一個start_time并且stop_time必然是 string '0'。
考慮回圈的第一次迭代。start_time == stop_time == '0',因為您在回圈之前將它們設定為此字串。
然后,if執行此陳述句:
if i[2] == 'HOSTLER_COMPLETE':
stop_time = date(datetime.strptime(i[4], '%Y-%m-%d %H:%M:%S'))
trailer = i[11]
elif i[2] == 'HOSTLER_START' and i[11] == trailer:
start_time = date(datetime.strptime(i[4], '%Y-%m-%d %H:%M:%S'))
以下是可能的場景:
(i[2] == 'HOSTLER_COMPLETE') is True,因此采用第一個分支。然后:stop_time成為有效日期start_time保持等于字串'0'
- OR
(i[2] == 'HOSTLER_START' and i[11] == trailer) is True,因此采用第二個分支。然后:start_time成為有效日期stop_time保持等于字串'0'
- OR兩個分支都不被采用,因為沒有明確的
else分支。然后:start_time保持等于字串'0'stop_time保持等于字串'0'
因此,在if宣告之后,至少有一個start_time和stop_time將必然等于'0'。
從字串中減去任何東西都是一個錯誤(就像從任何東西中減去一個字串一樣),所以print(stop_time - start_time)失敗了。因此,回圈的第一次迭代失敗,拖累了整個程式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/315073.html
