2014-11-04 72 views
-4

我有类似以下内容的文本文件的连续行之间的时间差:的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

您正在尝试的操作不起作用,因为您在迭代过程中没有要建立索引的数组。你只有当前行。但要计算时差,您需要访问当前行和前一行。

相反,我会遍历在对线,像这样:

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) 

这使得在浮动的时间差,你可以随时转/如果你想截断它。注意我没有看到如何在你的例子中获得最后一行80秒,不应该是50秒吗?

+0

简直太棒了! – Tito 2014-11-04 12:27:59