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。但是我尝试运行后发现,我目前的设置方式是不正确的。
所以我想问的是:在给定匹配行后,如何返回匹配行之后的若干行呢?我对编程还很陌生,如果这个问题听起来很傻,我表示歉意。我一直在努力工作,但没有找到解决办法,非常希望能得到一些帮助。
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
循环。