Python, печать от ключевого слова до следующей точки

#python #string

#python #строка

Вопрос:

Итак, это мой код

 a = input("Enter file name: ")
b = input("Enter keyword: ")

def search_string_in_file(file_name, string_to_search):
    line_number = 0
    results = ""
    with open(file_name, 'r' , encoding='latin1') as read_obj:
        for line in read_obj:
            line_number  = 1
            if string_to_search in line:
                print(line)

search_string_in_file(a, b)
  

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

Как и сейчас, он печатает всю строку, в которой было найдено ключевое слово.

Что я хочу сделать, так это просто печатать от ключевого слова до следующей точки.

Например: file.txt

 This is my house. I like it.
But my girlfriend hates it, but that's ok.
  

ключевое слово = мой

Фактический результат печатает обе строки, потому что обе строки содержат «my». Но он должен печатать только это:

 my house.
my girlfriend hates it, but that's ok.
  

Пока не нашел ответа, пожалуйста, помогите мне

Ответ №1:

Мы можем объединить строку line с помощью оператора [] . С помощью str.find() мы можем определить небольшую часть, которую нам нужно распечатать. Из документации:

 The find() method returns the index of first occurrence of the
substring (if found). If not found, it returns -1.
  

Итак, вот как мы могли бы переписать код:

 a = input("Enter file name: ")
b = input("Enter keyword: ")

def search_string_in_file(file_name, string_to_search):
    line_number = 0
    results = ""
    with open(file_name, 'r' , encoding='latin1') as read_obj:
        for line in read_obj:
            line_number  = 1
            word_index = line.find(string_to_search)  # position of first letter of the word
            if (word_index != -1):  # meaning the word was found
                period_index = line.find('.', word_index)  # position of first period after start of word
                print(line[word_index:period_index]

search_string_in_file(a, b)
  

Имейте в виду, что это приведет к сбоям, если внутри есть точка ‘.’ string_to_search . Чтобы убедиться, что в этом случае вы распечатываете всю строку, сделайте это вместо:

 period_index = line.find('.', word_index len(string_to_search))
  

Это пропускает всю длину string_to_search перед поиском периодов.