2017-04-17 9 views
1

私はリストにマッチした正規表現をロードして、メディアン、モード、平均を計算しようとしています。Pythonの中央値、モード、平均

データファイル(pc1.txt):

2017-04-16 13:32:59 
\\desktop-XXXXXXX\processor(_total)\% processor time : 1.05614841124945 
\\desktop-XXXXXXX\memory\% committed bytes in use : 5.50960924380334 

2017-04-16 13:33:05 
\\desktop-XXXXXXX\processor(_total)\% processor time : 1.08875159384721 
\\desktop-XXXXXXX\memory\% committed bytes in use : 5.5102938969471 

2017-04-16 13:33:10 
\\desktop-XXXXXXX\processor(_total)\% processor time : 0 
\\desktop-XXXXXXX\memory\% committed bytes in use : 5.46869437193207 

BootTime 200938 

------------------------------------ 
------------------------------------ 

2017-04-16 13:40:11 
\\desktop-XXXXXXX\processor(_total)\% processor time : 4.37510327488846 
\\desktop-XXXXXXX\memory\% committed bytes in use : 4.438387242009 

2017-04-16 13:40:17 
\\desktop-XXXXXXX\processor(_total)\% processor time : 1.90625777477218 
\\desktop-XXXXXXX\memory\% committed bytes in use : 4.44426156598249 

2017-04-16 13:40:22 
\\desktop-XXXXXXX\processor(_total)\% processor time : 0.078229917076289 
\\desktop-XXXXXXX\memory\% committed bytes in use : 4.44589104046464 

BootTime 69920 

正規表現の値を見つけるために:

Processor: ^[\\].+processor.+[: ](\d*\.?\d*) 
Memory: ^[\\].+memory.+[: ](\d*\.?\d*) 
Boottime: ^BootTime.(\d+) 

これまでのところ、私がしようとした:しかし、私は

with open('pc1.txt') as f: 
    for line in f: 
     re.findall(processor, f) 

を1)値を一致させることができません。 2)リストに入れてください。 3)中央値、モードおよび平均を計算する。

from statistics import mode 
mode([value1, value2]) 

しかし、それでもまだ、私は一緒にすべてのピースを置くことはできません。

私はモードを計算する方法の基本的な知を持っています。また、私は統計を簡単/簡単に扱うことができる他のプログラミング言語にもオープンしています。テキストファイルから

+0

正確 'processor_regex'は何ですか? – Vallentin

+0

あなたはPythonバージョンを使用していますか? –

+0

Python2.7。 Ubuntu 16.04。 –

答えて

0

マッチがfloatsstringsではありません、我々はmedianmeanを得るためにそれらを変換する必要があり、私はstatistics、すなわち上の代わりにnumpyを使用:

import numpy as np 
import re 

with open('pc1.txt', 'r') as myfile: 
    data = myfile.read() 
    processor = re.findall(r"processor time : ([\d.]+)", data, re.IGNORECASE | re.DOTALL | re.MULTILINE) 
    processor = [float(i) for i in processor] # we convert the matching list of strings to floats 
    if processor: 
     print (np.median(processor)) 
     print (np.mean(processor)) 

    memory = re.findall(r"memory\\%.*?: ([\d.]+)", data, re.IGNORECASE | re.DOTALL | re.MULTILINE) 
    memory = [float(i) for i in memory] # we convert the matching list of strings to floats 
    if memory: 
     print (np.median(memory)) 
     print (np.mean(memory)) 

    boot_time = re.findall(r"BootTime ([\d]+)", data, re.IGNORECASE | re.DOTALL | re.MULTILINE) 
    boot_time = [float(i) for i in boot_time] # we convert the matching list of strings to floats 
    if boot_time: 
     print (np.median(boot_time)) 
     print (np.mean(boot_time)) 
+0

なんらかの理由で、コードは何も出力しません。それも正しいように見えます。 –

+0

出力はありません。 –

+0

正直なところ、コードを実行するときに何が間違っているのかわかりません。私の側では、期待どおりに動作します。 –

関連する問題