Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Josef Gores 07. 01. 2019, 08:56:53

Název: Python 3 vyhladavane v res
Přispěvatel: Josef Gores 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?
Název: Re:Python 3 vyhladavane v res
Přispěvatel: Danny 07. 01. 2019, 10:13:43
Nastudujte si regulární výrazy.
Název: Re:Python 3 vyhladavane v res
Přispěvatel: Josef Gores 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)

Název: Re:Python 3 vyhladavane v res
Přispěvatel: operator 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_.
Název: Re:Python 3 vyhladavane v res
Přispěvatel: soyo 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.
Název: Re:Python 3 vyhladavane v res
Přispěvatel: koss 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)