Python 3 vyhladavane v res

Josef Gores

Python 3 vyhladavane v res
« kdy: 07. 01. 2019, 08:56:53 »
Dobry den.
V pythone3 dostanem string kde je zoznam poslednych transakcii nieco all (" is:456,value: 567") ,("is:456,value:865")..
Ako dosiahnut to aby mi s toho listu vypisalo len to co chcem vyhladat? Teda input is:456 a vrati mi to cely riadok? Ako to spravit tak aby mi to vratilo vsetky riadky kde je hladany retazec?


Danny

Re:Python 3 vyhladavane v res
« Odpověď #1 kdy: 07. 01. 2019, 10:13:43 »
Nastudujte si regulární výrazy.

Josef Gores

Re:Python 3 vyhladavane v res
« Odpověď #2 kdy: 07. 01. 2019, 18:03:41 »
Presiel som si regularne vyrazy ale obavam sa ze to neriesi moj problem, resp. nieco mi uslo.
Viem najst zaciatok retazca a koniec ale neviem ako vypisat udaje ktore su medzi nim.
Kód: [Vybrat]
print(res.text)
    buf = res.text
    m = re.findall('\[\{', buf)
    print(m)


operator

Re:Python 3 vyhladavane v res
« Odpověď #3 kdy: 07. 01. 2019, 19:00:43 »
Dobry den.
V pythone3 dostanem string kde je zoznam poslednych transakcii nieco all (" is:456,value: 567") ,("is:456,value:865")..
Ako dosiahnut to aby mi s toho listu vypisalo len to co chcem vyhladat? Teda input is:456 a vrati mi to cely riadok? Ako to spravit tak aby mi to vratilo vsetky riadky kde je hladany retazec?
Dotaz je nesrozumitelny, pises o _string_, ale ukazujes neco jako _tuply_ nebo co a ptas se na _list_.

soyo

Re:Python 3 vyhladavane v res
« Odpověď #4 kdy: 09. 01. 2019, 06:58:17 »
Zdravim, ak je vstup jeden dlhy string, tak by som zacal string.split a ak je v tych datach nieco unikatne, tak sup do mapy/slovnika. Inak ohladom regularnych vyrazov re.compile ... match... group je jeden zo sposobov, ako sa dostat k najdenej hodnote.


koss

Re:Python 3 vyhladavane v res
« Odpověď #5 kdy: 09. 01. 2019, 10:29:29 »
Kód: [Vybrat]
input_data = '(" is:456,value: 567") ,("is:456,value:865")'


def strlist_to_list(str_list, separator=','):      # rozdel string podle znaku do listu a trimuj ze zacatku a konce netisknutelne znaky
    out_list = []
    in_list = str_list.split(separator)
    for i, item in enumerate(in_list):
        item = item.strip()
        if item != '':
            out_list.append(item)

    return out_list


def get_from_input(input_data, find_value):
    input_data = input_data.replace(') ,', '),')    # vyhod mezery mezi )_, a ,_(
    input_data = input_data.replace(', (', ',(')

    input_data = input_data.strip('"')  # vygumuj "

    list_data = strlist_to_list(input_data, '),(')  # rozdel na list podle znaku ),(

    if len(list_data) > 0:
        list_data[0] = list_data[0].strip('(')      # vygumuj uplne prvni (
        list_data[len(list_data) - 1] = list_data[len(list_data)-1].strip(')') # vygumuj posledni

        for i in range(0, len(list_data)):
            list_data[i] = list_data[i].strip('"')  # vyhod " ze zacatku a konce
            list_data[i] = list_data[i].strip()     # a mezery


    out_data = []                                   # seber vysledky
    for line in list_data:
        line_values = strlist_to_list(line, ',')
        if len(line_values) > 1:
            if line_values[0] == find_value:        # is:xxx cast je find_value (is:456), tak dej druhou pulku k vysledkum (value: 567)
                out_data.append(line_values[1])

    return out_data


# start
print('vstup:')
print(input_data)
print('')

filtered_data = get_from_input(input_data, 'is:456')

print('vystup:')
for data_line in filtered_data:
    print(data_line)