如何解决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 举报,一经查实,本站将立刻删除。