2011-06-21 26 views
1

我有一個文本文件,其中有代表某些數據集的行。該文件本身相當長,但它包含以下格式的某些部分: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開頭的標頭。每個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

嘗試類似這樣的事情(略爲僞代碼)。

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) 

通過調用next(FH)可以檢索文件中的下一行,而不搞砸了你的for line in fh循環。

+0

感謝您的輸入!我會看看我是否可以像這樣工作,但爲什麼5用於range()參數? –

+0

@Simos Anderson - 猜測你想要插入多少行。就像我說的,代碼對於你的數據不是100%,它更像是一種方法概念。 –

相關問題