Как напечатать несколько строк с помощью line.strip () - PullRequest
1 голос
/ 23 мая 2019

Я работаю над программой интеллектуального анализа данных, которая ищет ключевое слово Background:yellow;.Я хочу найти его и напечатать строку, на которой он появляется, и десять строк, которые появятся после.до сих пор у меня есть программа, печатающая строку, на которой отображается ключевое слово, и номер строки, но я не могу заставить его напечатать следующие несколько строк.Мой код ниже:

Я пытался использовать print("line{}: {}".format{cnt, line[int:int]), но это не сработало.


import sys

sys.stdout = open('results', 'a')
print(sys.stdout)


filepath = 'test'

with open(filepath) as fp:
    line = fp.readline(5)
    cnt = 1
    while line:


        line = fp.readline()
        cnt += 1

        if str("Background:yellow;") not in line:
            continue

        elif str("Background:yellow;")  in line:

            print("""

                        FOUND

                        """)
            print("line{}: {}".format(cnt, line.strip()))

Ответы [ 3 ]

2 голосов
/ 23 мая 2019

Более простым решением было бы использование grep для того же:

grep -i -A 10 "Background:yellow;" <filename>

-A 10 напечатает 10 строк после соответствующей строки.

0 голосов
/ 23 мая 2019

Дополнение ответа @benjamin, если вы хотите получить вывод grep внутри python:


import subprocess

output = subprocess.check_output(
    'grep -i -A 10 "Background:yellow;" <filename>',
    stderr=subprocess.STDOUT,
    shell=True).decode()

lines = output.split('\n')
print(lines)

Первая строка: lines[0], это ваша совпавшая строка.

0 голосов
/ 23 мая 2019

Вот мой подход:

  1. Читать файл построчно
  2. Если мы найдем то, что ищем в этой строке, установите счетчик на 11 (это означает эту строку, плюс еще 10, чтобы следовать)
  3. Затем, если счетчик больше 0, выведите эту строку и уменьшите счетчик

Код:

counter = 0
with open('data.txt') as f:
    for line in f:
        if 'Background:yellow;' in line:
            counter = 11
            print()  # Optional: Put out an empty line
        if counter > 0:
            print(line, end='')
            counter -= 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...