当前位置: 首页 > 面试题库 >

如何只读取特定字符串后的文本文件中的行?

闾丘鸣
2023-03-14
问题内容

我想将字典中特定字符串之后的所有行读到字典中。我想对数千个文本文件执行此操作。

我可以'Abstract'使用以下代码(从此答案中得到)识别并打印出特定的字符串():

for files in filepath:
    with open(files, 'r') as f:
        for line in f:
            if 'Abstract' in line:
                print line;

但是如何告诉Python开始读取仅在字符串之后的行?


问题答案:

当您到达要开始的行时,只需开始另一个循环即可:

for files in filepath:
    with open(files, 'r') as f:
        for line in f:
            if 'Abstract' in line:                
                for line in f: # now you are at the lines you want
                    # do work

文件对象是其自己的迭代器,因此当到达其中的行时,'Abstract'我们将从该行继续进行迭代,直到消耗完迭代器为止。

一个简单的例子:

gen = (n for n in xrange(8))

for x in gen:
    if x == 3:
        print('Starting second loop')
        for x in gen:
            print('In second loop', x)
    else:
        print('In first loop', x)

产生:

In first loop 0
In first loop 1
In first loop 2
Starting second loop
In second loop 4
In second loop 5
In second loop 6
In second loop 7

您还可以使用itertools.dropwhile来消耗所需的行:

from itertools import dropwhile

for files in filepath:
    with open(files, 'r') as f:
        dropped = dropwhile(lambda _line: 'Abstract' not in _line, f)
        next(dropped, '')
        for line in dropped:
                print(line)


 类似资料:
  • 问题内容: 如何删除文本文件中的特定字符串? 问题答案: 找到文件。 创建一个临时文件(否则,您必须先将所有内容读取到Java的内存中)。 确定字符集。 确定您要删除的字符串。 打开文件进行读取。 打开临时文件进行写入。 逐行读取文件。 从行中删除字符串。 将其写入临时文件。 关闭读取器和写入器(最好在块中)。 删除文件。 重命名临时文件。 也可以看看: Java教程-课程:基本I / O

  • 我在变量中有一个字符串,我想提取第二个冒号后面的数字,即。那么,我怎样才能提取那个数字呢?

  • 问题内容: 我有一个很大的文本文件,但是没有换行符。它只包含一个很长的字符串(包含所有ASCII字符的1行巨大的字符串),但是到目前为止一切正常,因为我可以将整行读入Java的内存中,但是我想知道是否有内存由于文件变得如此之大(如5GB +),并且程序无法一次将整个文件读入内存,因此出现泄漏问题,那么在那种情况下,读取此类文件的最佳方法是什么?我们可以将巨大的线条分成2个部分,甚至多个块吗? 这是

  • 问题内容: 我有一个名为log.txt的文本文件,它具有以下数据 第一个逗号之前的数字是指定每个项目的索引。 我想做的是读取文件,然后将给定行中字符串的一部分(例如textFiles / a.txt)替换为另一值(例如something / bob.txt)。 这就是我到目前为止 问题答案: 一种方法是使用: 您还可以使用正则表达式,或查找搜索字符串在一行中的何处。

  • 问题内容: 有什么方法可以从文本文件中读取特定行?在API或Apache Commons中。就像是 : 我同意实现起来很简单,但是特别是当文件很大时,效率不是很高。 问题答案: 可以,但是仍然存在效率问题。 或者,您可以使用: 由于有缓冲,这将稍微更有效。 看一下并尝试跳过整行(使用正则表达式)。我无法确定它是否会更有效- 对其进行基准测试。 PS 代表 效率, 我的意思是 记忆效率

  • 问题内容: 我试图根据此方法的输出以UTF-8或Windows-1252格式读取文件: 到目前为止,我有: 我遇到的问题是将实例转换为。 此外: 文件本身的名称()不能被认为是特定的; 有时文件名将包含UTF-8字符,有时还包含Windows-1252。文件的内容也是如此(但是,如果文件名和文件内容 始终 具有匹配的字符集)。 只有内部的逻辑可以选择要应用的字符集,因此 在 调用此方法 之前 尝试