微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 for 循环中传递行号来遍历文本文件?

如何解决如何在 for 循环中传递行号来遍历文本文件?

我有一个文本文件,我想在其中找到关键字后才开始执行任务。但是我要搜索的关键字在文件中出现了两次。我只想为第二个关键字之后的文本执行任务。

我可以获得第二次出现所需关键字的行,但是我如何将其传递给 for 循环并执行我的任务。

我正在寻找类似的东西:

with open(r"myfile.txt") as openfile:
    for line in (line_number,openfile):
        #Do my task to the line

其中 line_number 是我第二次找到关键字的编号

解决方法

您可以使用简单的标志计数来确定第二次找到关键字:

keyword = 'A'
with open('test.txt') as fp:
    c,flag = 0,0
    while True:
        line = fp.readline()
        if not line:
            break
        c += 1
        print("Line {}: {}".format(c,line.strip()))
        if keyword in line:
            flag += 1
        if keyword in line and flag == 2:
            print('do some tasks')

输出

Line 1: C E
Line 2: A F
Line 3: E
Line 4: C D
Line 5: A B
do some tasks
Line 6: 1 C E

更好的方法(相同的输出)是使用 enumerate

keyword = 'A'
with open('test.txt') as fp:
    flag = 0
    for c,line in enumerate(fp):
        print("Line {}: {}".format(c+1,line.strip()))   #remove whitespace characters like `\n` at the end of each line
        if keyword in line:
            flag += 1
        if keyword in line and flag == 2:
            print('do some tasks')
,

如果您只想处理关键字第二次出现的行之后的行,则不应查找行号。相反,您可以将文件对象视为迭代器,并使用生成器表达式过滤包含关键字的行,并使用 itertools.islice 使用直到第二次出现关键字的行。

例如,下面的代码会跳过行,直到第二次出现关键字 begin

from itertools import islice

keyword='begin'
with open('myfile.txt') as openfile:
    list(islice((line for line in openfile if keyword in line),2))
    for line in openfile:
        print(line,end='')

所以给定myfile.txt的内容:

header
begin
second header
begin
foo
bar

上面的代码会输出:

foo
bar

演示:https://replit.com/@blhsing/OnlyUtterFossil

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。