#python #python-3.x
#python #python-3.x
Вопрос:
У меня есть файл, который я читаю и разделяю по строкам, и я хочу печатать только предложения, в которых есть ключевое слово: ‘Cat’. Однако файл содержит разделы, отформатированные в фигурных скобках, например. {Как только кошка входит в комнату}
Полный текст:
CAT.
{Кошка входит в комнату.} Собака, что ты здесь делаешь?
СОБАКА.
Как это выглядит, я делаю Cat? Я наблюдаю за полицейскими.
CAT.
Я не знал, что ты такой большой фанат! В каком городе это происходит?
СОБАКА.
{Он поворачивает свой стул к коту.} Попробуйте угадать, Кот!
CAT.
Я не знаю! Я просто пытаюсь завязать разговор.
Я могу печатать строки, содержащие ключевое слово, которое я ищу, но когда я печатаю, он также выводит строки в фигурных скобках. Я пытался добавить более одного разделителя, но при каждой попытке получаю ошибку.
for i in catDog.split('n'):
if str('Cat')in i:
print(i)
Я ожидаю вывода:
Похоже, что я делаю Cat?
Угадайте, Кот!
Вместо этого я получаю:
[Кошка входит в комнату.]
Похоже, что я делаю Cat?
[Он поворачивает свой стул к Коту.]
Угадай, Кот!
Я не хочу, чтобы кто-то писал код за меня; скорее, укажите мне правильное направление.
Комментарии:
1. Код выполняет то, что вы ему говорите. В каждом из этих предложений слово Cat является этой строкой, поэтому код вернет слово cat. Есть ли еще что-то, к чему мы можем запросить строки?
2. Под «ключевым словом» вы подразумеваете
cat
все заглавные буквы, или оно также должно начинаться с строки?3. @EdekiOkoh Правильно, можно ли исключить строки, которые имеют фигурные скобки {} ?
4. @chepner ключевое слово ‘Cat’, конечно, чувствительно к регистру. Я просто переформатировал код для облегчения понимания
5. Если { являются строками, вы можете использовать что-то вроде if «{» не в i. но, не видя фактического представления строк, трудно сказать
Ответ №1:
Учитывая строку, подобную:
{Cat enters the room.} Dog, what are you doing here?
Из вашего вопроса неясно, должна ли (а) эта строка совпадать и (б) если она совпадает, должны ли мы печатать содержимое только за пределами {...}
раздела. Предполагая, что да в обоих этих случаях, вы могли бы сделать что-то вроде:
for i in catDog.split('n'):
if str('Cat') in i:
parts = i.split('}', 1)
print(parts[1 if len(parts) > 1 else 0])
Что даст вам:
Dog, what are you doing here?
What does it look like I'm doing Cat? I'm watching Cops.
Take a guess Cat!
Если вы хотите игнорировать совпадения в начальном {...}
разделе, то вы могли бы написать:
for i in catDog.split('n'):
parts = i.split('}', 1)
if str('Cat') in parts[-1]:
print(parts[1 if len(parts) > 1 else 0])
Что дает вам:
What does it look like I'm doing Cat? I'm watching Cops.
Take a guess Cat!
Ответ №2:
Если вы знаете, какие типы скобок содержат ваши отступы, вы удаляете эту часть строки перед поиском cat.
if i.startswith('{'):
i = i[i.index("}") 1:]
if str("Cat") in i:
print(i)
Комментарии:
1. но невозможно получить точное положение конечной фигурной скобки }
2.
index('}')
предоставляет это местоположение3. не могли бы вы объяснить строку: i = i [i.index («}») 1:] Мне трудно понять, как это интерпретировать..
4. Эта строка присваивает подстроку i из местоположения
"}" 1
в ее конец обратно переменной i.somestring[startIndex:endIndex]
возвращает подстроку, начинающуюся сstartIndex
и заканчивающуюся наendIndex - 1
. ИсключениеstartIndex
означает начать с начала, исключениеendIndex
означает весь путь до конца.index('}')
возвращает индекс первого найденного соответствия.