2016-04-19 3 views
0

私は次の形式のテキストファイルを持っています。Pythonのテキストファイルからのフィールドのフィルタリングと抽出

03/12 20:23:26.11: 04:23:26 L9 <Mx Acc Magnum All   XDV:00111A0000000117 00D3001200870172 01FF6000F01CFE81 3D26000000000300 
03/12 20:23:26.11: 04:23:26 L9 <Mx Acc MID 0x1500 Len 26 XDV:00111A0000000117 00D3001200870172 01FF6000F01CFE81 3D26000000000300 
03/12 20:23:26.11: 04:23:26 L8 <Mx JK31 (Mx)     JSP:17.37.6.99: Size = 166, Data: 00345C4101003031 E463EF0113108701 5A01FF6008F01CFE 81AB170000000003 EF01131087015A01 FF6008F01CFE81AB 170000000003EF01 131087015B01FF60 00F01CFE81701B00 00000003EF011310 87015B01FF6000F0 1CFE81701B000000 0003EF0113108701 5C01FF2000F01CFE 81CB240000000003 EF01131087015C01 57CC00F01CFE81CB 240000000003EF01 131087015D01FF20 00F01CFE815B2900 00000003EF011310 87015D01FF2000F0 1CFE815B29000000 0003EF0113108701 5E01FF6000F01CFE 819D280000000003 EF01131087015E01 FF6000F01CFE819D 0003 
03/15 20:23:26.11: 04:23:26 L8 <Kx JK49 (Kx)     JSP:15.33.2.93: Size = 163, Data: 00647741000030EF 01131087015A01FF 6008F01CFE81AB17 0000000003EF0113 1087015A01FF6008 F01CFE81AB170000 000003EF01131087 015B01FF6000F01C FE81701B00000000 03EF01131087015B 01FF6000F01CFE81 701B0000000003EF 01131087015C01FF 2000F01CFE81CB24 0000000003EF0113 1087015C01FF2000 F01CFE81CB240000 000003EF01131087 015D01FF2000F01C FE815B2900000000 03EF01131087015D 01FF2000F01CFE81 5B290000000003EF 01131087015E01FF 6000F01CFE819D28 0000000003EF0113 1087015E01FF6000 F01CFE819D280000 A6220000000003 
03/15 20:23:26.11: 04:23:26 L8 <Kx JK21 (Kx)     JSP:10.22.1.53:Size = 163, Data: 009D1141000030EF 01131087015A01FF 6008F01CFE81AB17 0000000003EF0113 1087015A01FF6008 F01CFE81AB170000 000003EF01131087 015B01FF6000F01C FE81701B00000000 03EF01131087015B 01FF6000F01CFE81 701B0000000003EF 01131087015C01FF 2000F01CFE81CB24 0000000003EF0113 1087015C01FF2000 F01CFE81CB240000 000003EF01131087 015D01FF2000F01C FE815B2900000000 03EF01131087015D 01FF2000F01CFE81 5B290000000003EF 01131087015E01FF 6000F01CFE819D28 0000000003EF0113 1087015E01FF6000 F01CFE819D280000 A6220000000003 

は、私は、ファイルの行ごとに抽出したい私は、時間(04:23:26)とサイズ(166)とプロットを抽出し、その中にL8 <Mx JK31 (Mx)を持っているすべての行を抽出したいit.For例にフィルタを適用します時間の経過とともにサイズのグラフ。私はPythonでこれをやりたい

# !/usr/bin/env python 
# -*- coding: utf-8 -*- 

match = ("L8 <Mx JK31 (Mx)") 

with open("test.txt") as fin: 
    print(' : {}', fin.name) 
    for line in fin: 
     if match in line: 
      print(line) 

私が期待したテキストを持つすべての行を抽出することができるよ。(if match in line:).How私はpythonで時間フィールドとサイズフィールドを抽出していますか?

答えて

1

あなたは、このように時間とサイズを抽出します。

# !/usr/bin/env python 
# -*- coding: utf-8 -*- 

match = ("L8 <Mx JK31 (Mx)") 
with open("test.txt") as fin: 
    print(' : {}', fin.name) 
    for line in fin: 
     if match in line: 
      line = line.strip.split() 
      time = line[2] 
      size = line[9].strip(",") 
1

また、あなたはより正確なマッチングを行うことができます正規表現を使用できます、他のモジュールを使用せずに、あなたのアプローチを拡張

m = re.search(r':\s(\d\d:\d\d:\d\d) L8 \<Mx\s+JK31 \(Mx\).*Size = (\d+),', line) 
if m: 
    # found match 
    print('Time: {}'.format(m.group(1))) 
    print('Size: {}'.format(m.group(2))) 
# else: 
    # pattern was not found: handle it or error 
0

を以下の解決策が働くことができます:

match = "L8 <Mx JK31 (Mx)" 

with open("test.txt") as fin: 
    print(' : {}', fin.name) 
    for line in fin: 
     if match in line: 
      print(line) 
      sizeStart = line.find("Size = ") 
      sizeEnd = line[sizeStart:].find(',') 
      size = line[sizeStart+len("Size = "):sizeStart+sizeEnd] 


      time1_start = line.find(" ") 
      time1_end = line[time1_start+1:].find(" ") 
      time1 = line[time1_start+1:time1_start+time1_end] 

      print size, time1 

同様に、あなたはtime2を得ることができます。私は慣れなければならない隠された構文のために、私はreモジュールへの依存を最小限に抑えます。より読みやすいものは議論の価値がある。

関連する問題