gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:52:11 26 4
gpt4 key购买 nike

我有一个文本文件,其中包含代表一些数据集的行。该文件本身相当长,但包含以下格式的某些部分:

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 循环。

关于Python文件搜索行并在匹配后返回特定行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6431366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com