Вывод символов после определенного слова python
Допустим, у меня есть текст с объемным количеством данных:
"price":"697.50","quality":"9586.71000000","accuracy":"1001.00","amount":"1001.00000000"
"price":"333.00","quality":"3232.400000","accuracy":"2010.00","amount":"5000.00000000"
и т.д
Как из него "выудить" минимальное численное значение, отвечающее за "price"?
Ответы (3 шт):
Автор решения: Universall
→ Ссылка
Например использовать регулярные выражения
import re
string = '"price":"697.50","quality":"9586.71000000","accuracy":"1001.00","amount":"1001.00000000" "price":"333.00","quality":"3232.400000","accuracy":"2010.00","amount":"5000.00000000"'
numbers = re.findall(r'"price":"([\d.]+)"', string) # Все цены (str)
numbers = list(map(float, numbers)) # Все цены (float)
print(min(numbers)) # Минимальный price
Автор решения: Namerek
→ Ссылка
Судя по тому, как исходный текст записан в Вашем вопросе, записи находятся каждая на отдельной строке. Исходя из этого предложу следующий вариант решения:
from typing import Dict, List
text = '''"price":"697.50","quality":"9586.71000000","accuracy":"1001.00","amount":"1001.00000000"
"price":"333.00","quality":"3232.400000","accuracy":"2010.00","amount":"5000.00000000"'''
def string_to_items(string: str):
k, v = string.split(':')
return k.strip('"'), float(v.strip('"'))
def line_to_dict(line: str):
return dict(
map(
string_to_items,
line.split(',')
)
)
values: List[Dict[str, float]] = list(
map(
line_to_dict,
text.split('\n')
)
)
print(
min([elem.get('price') for elem in values])
)
# 333.0
Но если я ошибся и данные записаны в одной строке, тогда безусловно лучше вариант с регуляркой
Автор решения: CrazyElf
→ Ссылка
Вариант с Pandas:
import pandas as pd
text = '''"price":"697.50","quality":"9586.71000000","accuracy":"1001.00","amount":"1001.00000000"
"price":"333.00","quality":"3232.400000","accuracy":"2010.00","amount":"5000.00000000"'''
json_str = '[{' + '},{'.join(text.split('\n')) + '}]'
df = pd.read_json(json_str)
print(df['price'].min())
Вывод:
333.0
Содержание датафрейма df:
| price | quality | accuracy | amount | |
|---|---|---|---|---|
| 0 | 697.5 | 9586.71 | 1001 | 1001 |
| 1 | 333.0 | 3232.40 | 2010 | 5000 |