8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

循环读取文件时返回到特定行

Faizal 2月前

56 0

我正在循环读取一个巨大的 txt 文件。当迭代特定行时,会有一些条件,并且根据满足的条件,我想返回并开始迭代......

我正在循环读取一个巨大的 txt 文件。当迭代特定行时,存在一些条件,并且根据满足的条件,我想返回并从另一个起始行号开始再次迭代该文件。

例如:

with open(filename) as f:
    for inputline in f:
        if inputline.strip() == 'abc':
            #goto line 3 and start the loop again
        print(inputline.strip())

假设输入文件是:

1
2
3
4
5
abc
6
7

输出应为:

1
2
3
4
5
3
4
5
3
4
5.....

我知道这个输入最终会进入无限循环并且永远不会终止。但我仍然想知道如何使用简单的 readline 来实现这一点。我无法使用 seek 命令,因为每行的长度不一致。

帖子版权声明 1、本帖标题:循环读取文件时返回到特定行
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Faizal在本站《loops》版块原创发布, 转载请注明出处!
最新回复 (0)
  • \“从另一个起始行号再次迭代文件\”,当您说这时,它是否始终是某一特定的行,还是会发生变化?

  • @user2778822 因此,对于 thisinputline.strip() == 'abc' 条件,它会转到第 3 行,而对于其他条件,它会转到其他行。是这样的吗?

  • Mat 2月前 0 只看Ta
    引用 4

    文件对象的方法 tell 跟踪每一行的结束位置(也是下一行的起始位置) seek 方法将文件指针重新定位回上一行的位置:

    with open(filename) as f:
        positions = []
        for inputline in f:
            position = f.tell()
            if not positions or position > positions[-1]:
                positions.append(position)
            inputline = inputline.strip()
            if inputline == 'abc':
                # the starting position of line number 3 is the ending position of line number 2
                f.seek(positions[1])
            else:
                print(inputline)
    
  • Eden 2月前 0 只看Ta
    引用 5

    您可以使用 file.seek()

    with open(filename) as f:
        while f.readable():
            inputline = next(f)
            if inputline.strip() == 'abc':
                f.seek(3)
                next(f)
            else:
                print(inputline.strip())
    
  • 您可以使用 递归 函数结合枚举来实现此目的:

    def fn(lines, index=0):
        for i, line in enumerate(lines, start=index):
        if line.strip() == 'abc':
            fn(lines, i)
        else:
            print(line)
    
    with open(filename) as f:
        fn(f.readlines())
    
返回
作者最近主题: