2016-08-12 55 views
0

我正在玩python,我试图找出一种方法来搜索某个时间范围内的特定单词的文本文件。该文件具有时间戳,但由于文件是文本文件,因此所有内容都是字符串。搜索文本文件的时间范围 - python

文本文件包含以下:

17:14:26.442 words words words words words 

17:15:32.533 words words words words words 

17:16:26.442 words words words words words 

17:17:32.533 words words words words words 

17:18:26.442 words words words words words 

17:19:32.533 words words words words words 

17:20:26.442 words words words words words 

17:21:32.533 words words words words words 

我想要做的就是寻找一个时间框架内字,并取回只有一行字有17间:17:32.533和17:20 :26.442。但是,既然它是一个文本文档,并且所有东西都是一个字符串,我不能使用range选项。有没有人对我如何做到这一点有一些建议?

+0

17:17:32.533是时间戳吗?它表示什么? –

+0

你必须每个文件只做一次,或者多次?你想执行一个单词搜索还是一个子串搜索? –

+0

如果你有很多次检查文件,你应该按时间排序数据,然后使用平分来获得日志n查找 –

回答

1

使用datetime模块来解析和时间戳字符串转换为datetime对象,然后你可以使用比较,以检查只落在该时间范围内的线路。

from datetime import datetime as dt 

start = dt.strptime('17:17:32.533','%H:%M:%S.%f') 
end = dt.strptime('17:20:26.442','%H:%M:%S.%f') 
word_to_search = 'word' 
with open('sample.txt', 'r') as f: 
    for line in f: 
     ts=dt.strptime(line.split()[0],'%H:%M:%S.%f') 
     if ts>start and ts<end: 
      if word_to_search in line: 
       print line 
+0

天真的问题:为什么不使用'time.strptime'? –

+0

我认为它不工作,因为我读这个问题的第一个答案 http://stackoverflow.com/questions/698223/how-can-i-parse-a-time-string-containing-milliseconds-in-it -with-python – Wajahat

+0

其实它可能只是工作,'struct_time'可能不包含微秒,但如果没有重复的时间戳(删除毫秒),那么它会正常工作。 – Wajahat

0

如果时间戳是完全相同的格式你描述(HH:MM:SS.SSS),那么你可以直接比较:

start = '17:17:32.533' 
end = '17:20:26.442' 
with open(filename, 'r') as f: 
    for line in f: 
     if line[:12] >= start and line[:12] <= end: 
      print(line) 

如果这不起作用,因为如01:01:01.000以1:1:1.0输出,您必须首先解析时间戳。例如:

import datetime 
start = datetime.time(17, 17, 32, 533) 
end = datetime.time(17, 20, 26, 442) 
with open(filename, 'r') as f: 
    for line in f: 
     timestamp, words = line.split(None, 1) 
     time = datetime.strptime(timestamp, "%H:%M:%S.%f").time() 
     if time >= start and time <= end: 
      print(words) 
+0

拆分不需要关键字参数,你想'line.split(None,1)' –

+0

啊,是的,对不起,错误的python版本。在Python3中它确实。 –

+0

谢谢TIm Fuc​​hs,我会测试一下它,并在这里发布我发现的东西。感谢您的详细和快速的回​​应!我在Python版本2.7 – user6534872