#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
перед поиском периодов.