Как сделать поиск по ключевому слову с занесением в переменную?
Дан текстовый файл с данными в виде:
123:4000
567:3000
890:2000
Необходимо выполнить поиск заданного числа (прим. 567) и занести в переменную число в этой строке после двоеточия (т.е. 3000).
Ответы (5 шт):
Автор решения: Zhihar
→ Ссылка
например, так:
with open(file_path, 'r') as file:
data = [list(map(int, line[:-1].split(":"))) for line in file.readlines()]
res = [obj[1] for obj in data if obj[0] == 567]
Автор решения: ПИТОНИСТ версия-3-8
→ Ссылка
Простой код в лоб (удобная структура данных в данном случае - словарь):
sl={}
t=open('file.txt')
tr=t.read()
tr = tr.split('\n')
for i in tr: sl[int(i.split(':')[0])] = int(i.split(':')[1])
per = (sl[int(input('Поиск: '))])
print(per)
Ввод:
Поиск: 567
Вывод:
3000
Автор решения: IvanZ
→ Ссылка
Простой код
f = open('file.txt', 'r')
sl = {}
for pairs in f:
sl[pairs.split(':')[0]] = pairs.split(':')[1]
number = sl[input()]
print(number)
Автор решения: Garry Galler
→ Ссылка
def search(file, what):
for line in file:
val = line.split(":")
if len(val) == 2 and val[0].strip() == what:
return val[1].strip()
return ""
# это имитация чтения из файла
from io import StringIO
file = StringIO("""123:4000
567:3000
890:2000""")
#val = search(open("test.txt"), "567")
val = search(file, "567")
print(val) # "3000"
Вариант с регулярными выражениями:
>>> import re
>>> def search(s, what):
m = re.search(fr"(?:{what}):(\d+)", s)
if m: return m.group(1)
return ""
>>> s = StringIO("""123:4000
567:3000
890:2000""").read() # это как если бы мы прочитали файл
>>> search(s, "567")
'3000'
>>> search(s, "890")
'2000'
>>> search(s, "1000")
''
Автор решения: SergFSM
→ Ссылка
С помощью регулярки:
from re import search
k = '890'
with open('file.txt') as f:
res = s[1] if (s := search(fr'{k}:(\d+)', f.read())) else 'не найдено'
print(res) # '2000'