我有一个文本文件,其中包含代表某些数据集的行。文件本身相当长,但它包含以下格式的某些部分:
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。但我已经尝试过运行它,并且我意识到到目前为止我设置它的方式并不正确。 所以这是我的问题:当给定匹配后所需行数时,如何在匹配行后返回多行?我是编程的新手,如果这个问题看起来很愚蠢我会道歉。我一直在努力工作,没有运气,并希望得到任何帮助。
答案 0 :(得分: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
循环。