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     |
.

其中每个节都有一个以序列名称开头的标题。每个序列名称都不同。带有标题的行还包括该系列赛中的球队数量,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*Numbers*ofs*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。但我试过运行它,我意识到迄今为止我设置它的方式是不正确的。所以我的问题是:当给定匹配后所需的行数时,如何在匹配行后返回多行?我是编程新手,如果这个问题看起来很傻,我深表歉意。我一直在努力工作,但没有运气,如果有任何帮助,我将不胜感激。

尝试类似的操作(稍微伪代码)。

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循环的情况下检索文件中的下一行。

相关内容

  • 没有找到相关文章

最新更新