我有一个文本文件,其中有表示一些数据集的行。文件本身相当长,但它包含以下格式的某些部分:
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
循环的情况下检索文件中的下一行。