distortion
Июль 8, 2015 22:27:49
Здравствуйте. Написал на Python простенького бота для Telegram. Суть проблемы в следующем: есть txt файл с информацией в формате “{ключевое слово}информация”. В таком формате несколько строк. Как найти по ключевому слову строку и вывести ее пользователю? Пробовал с простым поиском, он ищет просто слово. Не могу понять, как добавить фильтр на {ключевое слово} с учетом скобок. И как вывести потом именно строку, а не только искомое слово.
botinag
Июль 8, 2015 22:50:21
tst.txt:
{keyword}info
123
{keyword}info2
fgfd
23fg>>> with open(r'c:\tst.txt', 'r') as f:
... for line in f.readlines():
... if line.startswith('{keyword}'):
... print line
...
{keyword}info
{keyword}info2
distortion
Июль 8, 2015 23:18:49
Спасибо большое! Работает. Только теперь возник ещё один вопрос. А как вывести содержимое строки без {ключевое слово}?
JOHN_16
Июль 8, 2015 23:26:41
distortion
значит написали бота , а с такой задачей не справились? серьезно?
distortion
Июль 8, 2015 23:34:30
Не совсем написал. Просто исправил код, который нашёл на Хабре и добавил свои функции. С Python почти не знаком был, узучал по мере необходимости. Такого фильтра не видел - как следствие не изучал ещё. Да и написав бота с нуля, я бы не обращался в ветку “для новичков”. Мне так кажется)
JOHN_16
Июль 9, 2015 04:50:34
distortionЭто технический форум, здесь надо быть внимательным к тому что пишешь)
вместо
можно написать так:
print line.split('}')[-1]
Строку которая была найдена из кода в прошлом посте, будет разбита на составляющие, в качестве критерия будет служить символ закрывающейся фигурной скобки { , а с помощью индексации полученного списка будет выведен последний элемент. Так как структура простая этого будет достаточно.
doza_and
Июль 9, 2015 08:43:56
:) :) :) Сейчас модно применять функциональный стиль. Его любители скfжут что ваша задача решается в одну строчку. Но поскольку язык питон не функциональный :( :( :( то строчки получается 2
import re
print(re.findall(r"\{(\w+)\}(\w+)",open("a.txt","r").read()))
{keyword}info0 adda {keyword}info1
123
{keywordx}info2
fgfd
23fg
>>>
[('keyword', 'info0'), ('keyword', 'info1'), ('keywordx', 'info2')]
distortion
Июль 9, 2015 14:18:10
JOHN_16
Спасибо! Все работает! И еще один вопрос, если можно

. Как сделать, чтоб поиск не учитывал регистр?
JOHN_16
Июль 9, 2015 14:39:55
distortionу строк есть метод который переводит регистр. Например как то так :
if line.lower().startswith('{keyword}')
distortion
Июль 9, 2015 15:03:24
‘str’ object has no attribute ‘line’ ошибка появляется