python中timedelta的持续时间

时间:2016-07-02 14:21:32

标签: python

`喜 我试图找到开始时间和结束时间之间的持续时间,但我只有一个输出!是否有任何解决方案来选择所有行!? 我的代码就像这样

import csv
import datetime
import time
from datetime import datetime
from datetime import timedelta,date
f1=open("starttime.csv")
f2=open("endtime.csv")
time_arry_temp = [[]]*5
i=0
for row in csv.reader(f1):
 fmt = '%d/%m/%Y %H:%M'
d1=datetime.strptime(row[0], fmt)
for row in csv.reader(f2):
 fmt = '%d/%m/%Y %H:%M'
d2=datetime.strptime(row[0], fmt)
tdelta = (d2-d1)
if tdelta.days < 0:
   tdelta = timedelta(days=0,seconds=tdelta.seconds,   microseconds=tdelta.microseconds)
t = tdelta * 24 * 60
time_arry=str(t).split()
print (time_arry)
time_arry_temp[i]=time_arry
i=i+1
f1.close()
f2.close()
print(time_arry_temp)

2 个答案:

答案 0 :(得分:1)

我已经编辑了你的代码并编写了这个。检查它是否能完成你的工作。

import csv
from datetime import datetime,timedelta
get_time=lambda x: datetime.strptime(x, '%d/%m/%Y %H:%M')
with open("starttime.csv") as f , open("endtime.csv") as g:
    d1=[get_time(row[0]) for row in csv.reader(f)]
    d2=[get_time(row[0]) for row in csv.reader(g)]
tdelta = [(a-b) for a,b in zip(d1,d2)]

for n,t in enumerate(tdelta):
    if t.days < 0:
        tdelta[n]=timedelta(days=0,seconds=t.seconds,   microseconds=t.microseconds)

# time_arry_temp =[str(i*24 * 60).split() for i in tdelta]
time_arry_temp =[str(i).split() for i in tdelta]
print time_arry_temp

答案 1 :(得分:0)

您只有一个输出,因为time_arry_temp中的所有项目都存在于同一个对象中,因此要修复问题替换行:

time_arry_temp = [[]]*5

time_arry_temp = [[] for _ in range(5)]

查看Python Common Gotchas文章。有很多有用的信息)