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

2024-06-23 16:28:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试解析一个大的文本文档。我想用这个代码从这个文档中提取信息

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"

我提前感谢你的帮助!如果我需要澄清什么,请告诉我。你知道吗


Tags: 代码in文档信息forobjectlineusername
3条回答

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

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

之后,您可以使用这些来打印带有index + / - x的行。你知道吗

您可以尝试使用linecachemodule

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

import re

with open('journal.0028.txt', 'r') as file_object:
    lines = file_object.readlines()

for i, line in enumerate(lines):
    if re.search(r"jrn\..*username", line.lower()):
        for item in lines[max(i-2, 0):i+3]:
            print(item.rstrip())

相关问题 更多 >

    热门问题