2011-06-21 8 views
1

私はいくつかのデータセットを表す行を持つテキストファイルを持っています。ファイル自体はかなり長いが、それは、次の形式の特定のセクションが含まれています。各セクションはSERIES_NAME始まるヘッダを有するPythonファイル検索行と一致後の行数を返します

Series_Name    INFO Number of teams : n1 
| Team          |  #  | wins  | 
| TeamName1         |  x  | y  | 
. 
. 
. 
| TeamNamen1        |  numn | numn  | 
Some Irrelevant lines 
Series_Name2    INFO Number of teams : n1 
| Team          |  #  | wins  | 
| TeamName1         |  num1 | num2  | 
. 

。各Series_Nameは異なります。ヘッダーのある行には、そのシリーズのチーム数n1も含まれます。ヘッダ行の後には、データの表を表す一連の行があります。各シリーズにはテーブルにn1 + 1行があり、各行には個々のチーム名と関連する統計情報が表示されます。 私は、ユーザーがチーム名を検索し、そのチームに関連付けられたテーブルの行を印刷する機能を実装しようとしています。ただし、特定のチーム名が複数のシリーズに掲載されています。 これを解決するために、私は現在、シリーズ名と最初のヘッダー行を検索し、シリーズに関連付けられたデータを表す次のn1 + 1行だけを出力できるように、自分のコードを記述しようとしています。 は、ここで私は今のところ出ているものです:

import re 
print 
fname = raw_input("Enter filename: ") 
seriesname = raw_input("Enter series: ") 

def findcounter(fname, seriesname): 
     logfile = open(fname, "r") 

     pat = 'INFO Number of teams :' 

     for line in logfile: 
       if seriesname in line: 
        if pat in line: 
          s=line 

     pattern = re.compile(r"""(?P<name>.*?)  #starting name 
          \s*INFO  #whitespace and success 
          \s*Number\s*of\s*teams #whitespace and strings 
          \s*\:\s*(?P<n1>.*)""",re.VERBOSE) 
     match = pattern.match(s) 


     name = match.group("name") 
     n1 = int(match.group("n1")) 
     print name + " has " + str(n1) + " teams" 
     lcount = 0 

     for line in logfile: 
       if line.startswith(name): 
         if pat in line: 
           while lcount <= n1: 
             s.append(line) 
             lcount += 1 
             return result 

私のコードの作品の最初の部分。人が探しているヘッダー行に一致し、行を解析し、そのシリーズに含まれるチームの数を出力します。基本的にヘッダー行はテーブルにいくつの行があるかを示しているので、その情報を使用して、設定カウンタがn1に達するまで各行を印刷し続けるループを構築できると考えました。しかし、私はそれを実行しようとしました、そして、私はこれまで設定した方法が間違っていることを認識します。 これは私の質問です:一致する行の後にいくつかの行を戻すには、一致する行の数を指定します。私はプログラミングに慣れていないので、この質問が愚かであれば謝罪します。私は運がないのでこれを非常に勤勉に取り組んでおり、何か助けに感謝します。

答えて

2

代わりにこのような(少し疑似コード)を試してみてください。あなたはfor line in fhループを台無しにすることなく、ファイルに次の行を取得することができます(FH)の次の呼び出しによって

with open('myfile') as fh: 
    for line in fh: 
    if line == match: # Some actual code here in your conditional: 
     for i in range(5): 
     additionalData = next(fh) 

+0

ありがとうございました!私はこのようなことで作業できるかどうかを見ていきますが、なぜrange()引数に5が使われていますか? –

+0

@Simos Anderson - あなたが取り入れたい行の数を推測するだけです。私が言ったように、コードはデータの100%ではありません。それはアプローチの概念です。 –

関連する問題