Python:查找文本文件中连续行之间的时间差

时间:2014-11-04 11:53:15

标签: python

我有一个包含以下内容的文本文件:

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'变量?

1 个答案:

答案 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秒?