Python文件搜索并返回匹配后特定行数

1 投票
1 回答
4385 浏览
提问于 2025-04-16 20:02

我有一个文本文件,里面有一些数据集的行。这个文件比较长,但里面有一些特定格式的部分:

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。但是我尝试运行后发现,我目前的设置方式是不正确的。

所以我想问的是:在给定匹配行后,如何返回匹配行之后的若干行呢?我对编程还很陌生,如果这个问题听起来很傻,我表示歉意。我一直在努力工作,但没有找到解决办法,非常希望能得到一些帮助。

1 个回答

3

试试这样做(稍微有点像伪代码)。

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 循环。

撰写回答