微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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为止。但是我已经尝试运行它,并且我意识到到目前为止设置它的方式是不正确的。 所以这是我的问题:如果给定匹配后所需的行数,如何在匹配的行之后返回多行?我是编程新手,如果这个问题看起来很傻,我深表歉意。我一直很努力地工作,没有运气,将不胜感激。     

解决方法

        尝试使用类似的方法(稍微伪代码)。
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
循环。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。