从文本文件中减去整数值并在Python2.7中显示结果

2024-09-24 22:22:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文本文件

00:47:12: start interaction

00:47:18: End interaction

00:47:20: Start interaction

00:47:23: End interaction

00:47:25: Start interaction

00:47:28: End interaction

00:47:29: Start interaction

00:47:31: End interaction

我想从文件中获取时间戳值,比如00:47:12:和下一个立即值00:47:18:,并找出本例中6秒的值之间的时间差,然后作为输出打印。希望能给我一些建议。我试图实现获取秒值的第一部分,但我被困在这里。在

代码:

^{pr2}$

第一个re.findall打印

47:12
47:18

所以考虑使用相同的方法输出它,只得到最后一部分,在这个例子中是12和{},然后执行减法或差分。但我无法找到只得到最后一部分并进行计算的方法。在

我想要我的输出

First interaction : 6 seconds
Second interaction : 3 seconds
Third interaction : 3 seconds 

等等


Tags: 方法代码re时间start建议endseconds
3条回答

您可以使用datetime模块这样做

如果您的文件是这样的:

00:47:12: start interaction
00:47:18: End interaction
00:47:20: Start interaction
00:47:23: End interaction
00:47:25: Start interaction
00:47:28: End interaction
00:47:29: Start interaction
00:47:31: End interaction

此处代码:

^{pr2}$

要处理空行:

>>> f = open('file.txt').readlines()
>>> my_file = [ x for x in f if x!='\n' ]
>>> for x in range(0,len(my_file)-1,2):
...     start = my_file[x].split()[0][:-1]
...     end = my_file[x+1].split()[0][:-1]
...     print str(datetime.datetime.strptime(end,"%H:%M:%S")- datetime.datetime.strptime(start,"%H:%M:%S")).split(':')[-1]
... 
06
03
03
02

如果要获取最后一个元素,可以在regex中使用look-behind

>>> s = '00:47:12: start interaction'
>>> re.search(r'(?<=\d{2}\:\d{2}\:)\d+',s).group(0)
'12'

然后将其转换为int,然后计算差值!在

编辑:由于您也可以检查空行,因此您需要使用if

^{pr2}$

另一种方法是拆分行并将字符串时间转换为时间:

>>> sp_line1= re.split(r'(?<=\d{2}:\d{2}:\d{2}):',s)
['00:47:12', ' start interaction']

演示:

>>> t1= strptime(sp_line1[0],"%H:%M:%S")
>>> s2="00:47:18: End interaction"
>>> sp_line1=re.split(r'(?<=\d{2}:\d{2}:\d{2}):',s2)
>>> sp_line2=re.split(r'(?<=\d{2}:\d{2}:\d{2}):',s2)
>>> t2= strptime(sp_line2[0],"%H:%M:%S")
>>> t1.tm_sec
12
>>> t2.tm_sec - t1.tm_sec
6

如果源文件的格式一致,即每对行的内容都是start / end组,那么这就可以了。它甚至可以解释空白行。在

from datetime import datetime

def calcTimes(file):
    with open(file, 'r') as f:
        parsedTimeArray = [line.split(': ')[0] for line in f if len(line.rstrip('\n')) != 0]
    format = '%H:%M:%S'
    for t in range(0,(len(parsedTimeArray)-1),2):
        timeStart = datetime.strptime(parsedTimeArray[t],   format)
        timeEnd   = datetime.strptime(parsedTimeArray[t+1], format)
        print str(int((timeEnd - timeStart).total_seconds()))

calcTimes('Time_delay')

结果:

^{pr2}$

相关问题 更多 >