2016-08-12 6 views
0

私はPythonで遊んでいますが、時間範囲内の特定の単語のテキストファイルを検索する方法を見つけようとしています。ファイルにはタイムスタンプがありますが、ファイルはテキストファイルなので、すべてが文字列です。時間範囲のテキストファイルを検索する - python

テキストファイルには、以下が含ま:17:

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の間で32.533と午後5時20分:26.442。しかし、そのテキスト文書とすべてが文字列なので、範囲オプションを使用することはできません。どのように私はこれを行うことができますについて誰かがいくつかの提案を持っていますか?

+0

「17:17:32.533」はタイムスタンプですか?それは何を表していますか? –

+0

あなたはファイルごとに一度だけ、または何度もやらなければなりませんか?単語のみの検索または部分文字列検索を実行したいですか? –

+0

ファイルをチェックする時間が多い場合は、データを時間順にソートしてからbisectを使ってログ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

naive question: '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

splitはキーワードargsを取りませんが、 'line.split(None、1)'が必要です –

+0

ああ、はい、申し訳ありませんが、間違ったpythonのバージョンです。 Python3ではそうです。 –

+0

TIm Fuc​​hsに感謝します。私はそれをいくつか試して遊び、ここで私が見つけたものを投稿します。私はあなたの詳細で迅速な対応に感謝します!私はPythonバージョン2.7です。 – user6534872

関連する問題