2011-06-29 4 views
1

私の入力は6,000タイムスタンプを含むプレーンテキストファイルです、私の出力が発見された行数を数えるCSVファイルである必要があり、この解析のタイムスタンプと5分間隔ごとにそれらを数える

2011-06-21 13:17:05,905 
2011-06-21 13:17:11,371 
2011-06-21 13:17:16,380 
2011-06-21 13:17:20,074 
2011-06-21 13:17:20,174 
2011-06-21 13:17:24,749 
2011-06-21 13:17:27,210 
2011-06-21 13:17:27,354 
2011-06-21 13:17:29,231 
2011-06-21 13:17:29,965 
2011-06-21 13:17:32,100 
2011-06-21 13:17:32,250 
2011-06-21 13:17:45,482 
2011-06-21 13:17:51,998 
2011-06-21 13:18:03,037 
2011-06-21 13:18:04,504 
2011-06-21 13:18:10,019 
2011-06-21 13:18:27,434 
2011-06-21 13:18:29,960 
2011-06-21 13:18:30,525 
... 

のように見えます

"全時間" で始まる各5分のスロット間の出力例:

From, To, Count 
13:00:00, 13:04:59, 0 
13:05:00, 13:09:59, 0 
13:10:00, 13:14:59, 19 
13:15:00, 13:19:59, 24 
... 

ありがとう!

+1

ファイルに実際に行間に余分な改行が含まれていますか? –

+0

いいえ、ここに挿入する必要がないので、すべてが1行に表示されるわけではありません。 –

+0

@storm_toコードブロックとしてフォーマットされている場合、空白と改行が適切に保存されます。 Ctl-Kを強調表示してコードブロックにします。 –

答えて

3

これはテストされていないため、時間変換関数を自分で実装する必要があります。時間モジュールでは、必要な機能を実行する必要があります。 convert_time_string_to_unix_timeは、1970年1月1日(標準のUnixタイムスタンプ)から、対応するミリ秒数に時間文字列を変換する必要があります。

基本的には、時間を5分のスロットに分割し、すべてのタイムスタンプをループし、見つかったタイムスタンプごとにそのタイムスタンプのスロットのタイムスタンプ数を1増やすことです。次に、見つかったすべてのスロットを繰り返してタイムスタンプに変換し、そのスロットで見つかったタイムスタンプの数も表示します。

SLOT_LENGTH = 1000 * 60 *5 
for line in file: 
    slot = convert_time_string_to_unix_time(line)/SLOT_LENGTH 
    bucket[slot] = bucket.get(slot, 0) + 1 

for slot in sorted(bucket.keys()): 
    print(
     convert_unix_time_to_time_string(slot * SLOT_LENGTH), 
     convert_unix_time_to_time_string((slot + 1) * SLOT_LENGTH - 1), 
     bucket[slot] 
    ) 
関連する問題