Как извлечь ограниченные строки данных из конкретного ключевого слова, используя python - PullRequest
1 голос
/ 07 ноября 2019

У меня есть текстовый файл, в котором мне нужно извлечь первые пять строк, в которых указано ключевое слово в абзаце.

Я могу найти ключевые слова, но не могу написать следующие пять строк из этого ключевого слова.

mylines = []                              

with open ('D:\\Tasks\\Task_20\\txt\\CV (4).txt', 'rt') as myfile:  

    for line in myfile:                   

        mylines.append(line)             

    for element in mylines:               

        print(element, end='')  

print(mylines[0].find("P"))

Пожалуйста, помогите, если у кого-то есть идеи, как это сделать.

Пример текстового файла ввода: -

Филиппинское партнерское агентство: ALL POWER STAFFING SOLUTIONS, INC.

Цели тренинга:: Получить международную культурную известность и практический опыт в области управления гостиничным бизнесом в качестве ворот к содержательной карьере гостеприимства. Чтобы развить мои навыки управления гостиничным бизнесом и стать конкурентоспособными на мировом уровне.

Название учебного заведения: ИНОСТРАННЫЙ УНИВЕРСИТЕТ ЮЖНОГО ВРЕМЕНИ - ФИЛИППИНЫ Местоположение Hom as Pinas City, Филиппина Дата начала обучения: (июнь 2007

Требуемый результат: -

Цели тренинга:: иметь международный культурный опыт и практический опыт в области управления гостиничным бизнесом, как ворот в значимую карьеру в гостиничном бизнесе. Развить свои навыки управления гостиничным бизнесом и стать конкурентоспособным на мировом уровне.

#

Мне нужно найти ключевое слово «Тренировочная цель» в текстовом файле, и оно должно найти только следующие 5 строк.

Ответы [ 3 ]

1 голос
/ 07 ноября 2019

Если вы просто пытаетесь извлечь весь блок «Учебные цели», найдите ключевое слово и продолжайте добавлять строки, пока не найдете пустую строку (или какой-либо другой подходящий маркер, например, следующий заголовок).

(отредактировано для обработки нескольких файлов и ключевых слов)

def extract_block(filename, keywords):
    mylines = []
    with open(filename) as myfile:
        save_flag = False
        for line in myfile:
            if any(line.startswith(kw) for kw in keywords):
                save_flag = True
            elif line.strip() == '':
                save_flag = False
            if save_flag:
                mylines.append(line)
    return mylines

filenames = ['file1.txt', 'file2.txt', 'file3.txt']
keywords = ['keyword1', 'keyword2', 'keyword3']
for filename in filenames:
    block = extract_block(filename, keywords)

Предполагается, что в каждом файле требуется только 1 блок. Если вы извлекаете несколько блоков из каждого файла, это будет сложнее.

Если вы действительно хотите 5 строк, всегда и каждый раз, то вы можете сделать что-то похожее, но добавьте счетчик, чтобы отсчитать ваши 5линии.

0 голосов
/ 07 ноября 2019

Это зависит от того, где вы \ n, но я собрал регулярное выражение, которое может помочь с примером того, как мой текст выглядит в переменной st:

In [254]: st                                                                                  

Out[254]: 'Philippine Partner Agency: ALL POWER STAFFING SOLUTIONS, INC.\n\nTraining Objectives::\nTo have international cultural exposure and hands-on experience \nin the field of hospitality management as a gateway to a meaningful hospitality career. \nTo develop my hospitality management skills and become globally competitive.\n\n\nEducation Institution Name: SOUTHVILLE FOREIGN UNIVERSITY - PHILIPPINES Location Hom as Pinas City, Philippine Institution start date: (June 2007\n'

impore re

re.findall('Training Objectives:.*\n((?:.*\n){1,5})', st)   

Out[255]: ['To have international cultural exposure and hands-on experience \nin the field of hospitality management as a gateway to a meaningful hospitality career. \nTo develop my hospitality management skills and become globally competitive.\n\n\n']
0 голосов
/ 07 ноября 2019

Попробуйте это:

with open('test.txt') as f:
    content = f.readlines()
index = [x for x in range(len(content)) if 'training objectives' in content[x].lower()]
for num in index:
    for lines in content[num:num+5]:
        print (lines)

Если у вас есть только несколько слов (только для получения индекса):

index = []
for i, line in enumerate(content):
    if 'hello' in line or 'there' in line:     //add your or + word here
        index.append(i)
print(index)

Если у вас их много (только для получения индекса):

list = ["hello","there","blink"]    //insert your words here
index = []
for i, line in enumerate(content):
    for items in list:
        if items in line:
            index.append(i)
print(index)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...