在for循环与if语句匹配后,如何打印多行?

时间:2018-04-19 18:18:44

标签: python for-loop

我正在尝试解析一个大文本文档。我想使用此代码

从本文档中提取信息
enumerated_journal = ""
with open('journal.0028.txt', 'r') as file_object:
    for line in enumerate(file_object.readlines()):
        enumerated_journal += str(line) + "\n"      

for line in enumerated_journal.splitlines():
    if "jrn." in line.lower() and "username" in line.lower():
        print(line)

此代码在文本文档中找到包含我用作过滤器的两个字符串的行。我想知道如何打印在此行之前或之后的行,以获得一定数量的行。

例如,如果print(line)返回,

"Username: Christian"

我想在此行之前和之后打印行。

"User Data:"
"Username: Christian"
"Age: 23"
"Location: Texas"

我提前感谢您的帮助!如果我需要澄清任何内容,请告诉我。

4 个答案:

答案 0 :(得分:1)

您可以尝试使用linecache module

答案 1 :(得分:1)

您正在将整个文件作为列表和枚举读入内存,因此您所要做的就是使用列表中的当前索引来获取其他附近的行。我将你的比较改为一个正则表达式更快一点,并提出:

{{1}}

答案 2 :(得分:0)

您可以改为使用索引(使用enumerate()):

indices = [index 
           for index, line in enumerate(read_journal_enumerated('journal.0028.txt').splitlines()) 
           if "jrn." and "username" in line.lower()]

之后,您可以使用这些来打印index + / - x行。

答案 3 :(得分:0)

这应该让你在那里的一部分:

rowspan
相关问题