2016-12-11 4 views
-1

私は(Pythonのパンダを使用して)解析する必要があるとその上にいくつかの統計情報を抽出します残りのログファイルがあります:Python:どのように残りのログインを解析するのですか?

2016-08-14 15:49:03,303 - RestLogger - INFO - rest_server::log_request:97 - REST call: <GET /v2/types/initiators/5?cluster-name=Virp-Cluster4 HTTP/1.1> with args {'cluster-name': ['Virp-Cluster4']} 
2016-08-14 15:49:14,779 - RestLogger - INFO - rest_server::log_response:109 - REST response with code 200 
2016-08-14 15:49:14,870 - RestLogger - INFO - rest_server::log_request:97 - REST call: <GET /v2/types/initiators/21?cluster-name=Vipr_Cluster3 HTTP/1.1> with args {'cluster-name': ['Vipr_Cluster3']} 
2016-08-14 15:49:14,949 - RestLogger - INFO - rest_server::log_response:109 - REST response with code 200 
2016-08-14 15:49:15,075 - RestLogger - INFO - rest_server::log_request:97 - REST call: <GET /v2/types/initiators/4?cluster-name=Virp-Cluster4 HTTP/1.1> with args {'cluster-name': ['Virp-Cluster4']} 
2016-08-14 15:49:15,114 - RestLogger - INFO - rest_server::log_response:109 - REST response with code 200 

私はこれを行う試してみました:

import pandas as pd 
data_frame = pd.read_table("rest.log",sep=r"\n",engine='python') 

結果データフレームを持っているとしてその中の2行は、(6行であるべきである):

data_frame.all(0)ヘッダ data_frame.allは、(1)ファイルの内容の残りを返し

期待される結果は、我々は最初の行に見れば、たとえば、パンダにキーと値のペアを作成し、正規表現のようになります。

:私は私のために、以下のハッシュを作成するためのパンダを希望

2016-08-14 15:49:03,303 - RestLogger - INFO - rest_server::log_request:97 - REST call: <GET /v2/types/initiators/5?cluster-name=Virp-Cluster4 HTTP/1.1> with args {'cluster-name': ['Virp-Cluster4']} 

  • 日:「2016年8月14日15:49:03303(DateTimeオブジェクトなど)
  • 方法:/ V2 /種類/イニシエータ/ 5クラスタ名= Virp-Cluster4:?
  • URLをGET
  • http_version: HTTP/1.1
  • 引数:{クラスタ名:[ 'Virp-Cluster4']}

任意の提案ですか?

+0

を正確に、あなたが必要とする分野は何ですか?あなたは私たちにサンプル出力をお願いしますか? regex(モジュール 're')を使ってあなたの質問に答えることは、おそらくあなたの最善の策です。 – blacksite

+0

は元の質問の投稿を更新しました。 reを使って良い音。あなたは例を挙げることができますし、それを問い合わせることができる変数に格納する方法(グループなどのように) – user664859

+0

あなたがすでに試したことを私たちに示してください。 – blacksite

答えて

0

正規表現を使用して、必要なものを得ることができます。確かに、以下のものはどのような意味でも非常に堅牢な正規表現ではありませんが、となります。あなたが進むにつれて、それらをより誤りのないものにすることを検討したいかもしれませんが、これは良いスタートです。

import pandas as pd 
import re 

dates = [] 
methods = [] 
urls = [] 
http_versions = [] 
arguments = [] 

# use this to help with appending strings instead of the list objects returned by re.findall() 
def try_except_index_catcher(lst): 
    try: 
     return lst[0] 
    except IndexError: 
     return None 

with open('rest.log', 'r') as f: 
    for line in f: 
     date = line.split(' - ') 
     method = re.findall(r'<\w+', line) 
     url = re.findall(r'(/.+) HTTP', line) 
     http_version = re.findall(r'HTTP/[0-9]+.[0-9]+', line) 
     argument = re.findall(r'{.+}', line) 

     dates.append(try_except_index_catcher(date)) 
     methods.append(try_except_index_catcher(method)) 
     urls.append(try_except_index_catcher(url)) 
     http_versions.append(try_except_index_catcher(http_version)) 
     arguments.append(try_except_index_catcher(argument)) 

df = pd.DataFrame({'dates': dates, 'methods': methods, 'urls': urls, 'http_versions': http_versions, 'arguments': arguments}) 

あなたはdfでこれを取得する:

>>> df 
          arguments     dates http_versions \ 
0 {'cluster-name': ['Virp-Cluster4']} 2016-08-14 15:49:03,303  HTTP/1.1 
1         None 2016-08-14 15:49:14,779   None 
2 {'cluster-name': ['Vipr_Cluster3']} 2016-08-14 15:49:14,870  HTTP/1.1 
3         None 2016-08-14 15:49:14,949   None 
4 {'cluster-name': ['Virp-Cluster4']} 2016-08-14 15:49:15,075  HTTP/1.1 
5         None 2016-08-14 15:49:15,114   None 

    methods            urls 
0 <GET /v2/types/initiators/5?cluster-name=Virp-Cluster4 
1 None            None 
2 <GET /v2/types/initiators/21?cluster-name=Vipr_Clus... 
3 None            None 
4 <GET /v2/types/initiators/4?cluster-name=Virp-Cluster4 
5 None            None 
関連する問題