我有一个包含以下内容的文本文件:
12:10:41.016 U
12:11:10.517 D
12:11:11.516 D
12:12:01.233 U
我想要这样的输出:
29 D-U
1 D-D
80 U-D
,表示(i + 1) - 第i行 - >以秒为单位的时差+标签(U / D)。
我正在接近
for num, line in enumerate(open("foo.txt")):
但是感到困惑;我如何使用'num'变量?
答案 0 :(得分:1)
你正在尝试的东西不会起作用,因为你在迭代时没有要编制索引的数组。您只有当前行。但要计算时差,您需要访问当前行和上一行。
相反,我会迭代成对的行,如下所示:
from datetime import datetime
from itertools import tee, izip
from functools import partial
def pairwise(iterable):
"""Iterate in pairs
>>> list(pairwise([0, 1, 2, 3]))
[(0, 1), (1, 2), (2, 3)]
"""
a, b = tee(iterable)
next(b, None)
return izip(a, b)
def parse_time(time_str, time_format='%H:%M:%S.%f'):
return datetime.strptime(time_str, time_format)
with open('foo.txt') as f:
for (time0, flag0), (time1, flag1) in pairwise(line.split() for line in f):
delta = parse_time(time1) - parse_time(time0)
print '{} {}-{}'.format(delta.total_seconds(), flag1, flag0)
这给出了float的时间差,如果需要,你可以随时对它进行舍入/截断。注意我不知道你的例子中最后一行是如何获得80秒的,不应该是50秒?