Как я могу извлечь определенный диапазон строк в файле .txt? - PullRequest
0 голосов
/ 25 июня 2019

Внутри текстового файла у меня есть ключевой текст «Всего вознаграждений».После нахождения второго совпадения этой текстовой строки в файле я должен прочитать и напечатать 20 строк до и после этой ключевой строки.

Я попытался найти что-то похожее в Интернете, но ничего не нашел.Я довольно новичок в программировании на Python, так что это была довольно тяжелая работа для меня.

Я нашел только первую нужную строку.

read_file = open(r"C:\Users\guerr\OneDrive\Documentos\PYTHON\TXT_FILES\file.txt", encoding='utf-8') # open file

lines = read_file.readlines()  # read all lines
for index, line in enumerate(lines):  # enumerate the list 

    if key in line: 
        print(line)  

ABCDEFG

Если мой ключ был «D», а диапазон строк был 2 до и после, он должен вернуться ко мне:

BCDEF

Ответы [ 2 ]

1 голос
/ 25 июня 2019
lines = '''
A
B
C
D
E
F
G'''

def custom_print(data, key, n):
    g = [data[i-2:i] + [val] + data[i+1:i+3] for i, val in enumerate(data) if key in val]
    return g[0] if g else []

data = lines.split()
print(custom_print(data, 'D', 2))

Печать:

['B', 'C', 'D', 'E', 'F']

Если key не найдено, custom_print() возвращает пустой список.

1 голос
/ 25 июня 2019

Предполагая, что каждая буква находится на отдельной строке, вы должны выполнить итерацию по списку и остановиться, как только найдете ключ, и записать, на каком номере строки вы были.Затем откройте его снова и напечатайте строку, если расстояние между ней и клавишей меньше или равно диапазону.

Например:

key = "D"
lines = read_file.readlines()  # read all lines
for index, line in enumerate(lines):  # enumerate the list 

    if key in line: 
        key_line = index

for index, line in enumerate(lines):
    if abs(index - key_line) <= 2:
        print(line)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...