2014-11-04 46 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