LINUX.ORG.RU

Почему не добавляется в словарь

 ,


0

2
    with open('dineOUT/story.txt') as f:

        tracker=0

        for line in f:
            if '<a href=' in line:

                d['Dessert']=[]
                print('a href', re.sub('\s*<.*?>\s*', '',line))
                d['Dessert'].append(re.sub('\s*<.*?>\s*', '',line).upper())

            elif tracker==1:
                if line != '\n':
                    print('tracker', line.rstrip('\n'))
                    d['Dessert'].append(line.rstrip('\n'))
                    tracker=0
                else:
                    tracker=0

            elif '<p class="list-dish-desc-details">' in line:
                tracker=1

            elif '<sup' in line:

                print('digits',re.findall('[0-9\.]+', line))
                digits=re.findall('[0-9\.]+', line)
                d['Dessert'].append(float(digits[0]+digits[1]))
    

    print(json.dumps(d))

Результат выполнения

(pr_env) $ python dineOUT/formDict.py
a href Coconut Grande
tracker A coconut lover's dream. Warm coconut cake topped with coconut-pineapple ice cream, fresh pineapple and toasted coconut, served in a fresh coconut.
digits ['9.', '99']
a href Lime Pie
tracker Our original. Handmade with brown sugar crust and golden meringue.
digits ['6.', '99']
a href Chocolate Island
tracker Rich chocolate mousse on a fudge brownie island in chocolate sauce and vanilla bean anglaise.
digits ['7.', '79']
a href Rum Cake
tracker An Island favorite made with Bacardi Oakheart Rum, topped with a handmade raisin butterscotch sauce and vanilla ice cream.</br>*Contains alcohol. Must be 21 to order. Eat responsibly.
digits ['7.', '49']
a href Banana Nut Bread Supreme
tracker Sliced bananas, vanilla ice cream on warm banana nut bread with hot butterscotch brandy sauce.
digits ['7.', '29']
a href Warm Chocolate Pineapple Upside-Down Cake
tracker A warm, rich chocolate cake with a chocolate molten center topped with caramelized pineapple, served with raspberry sauce and fresh Island fruit.
digits ['7.', '29']
a href Mango Sorbet with Tropical Fruit
digits ['1.', '99']
a href Vanilla Ice Cream with Chocolate Sauce
digits ['1.', '99']


"PASSION FRUIT MOCKTAIL", 3.95, "STRAWBERRY SMOOTHIE", 3.95, "PASSION FRUIT SMOOTHIE", 3.95], "Dessert": ["VANILLA ICE CREAM WITH CHOCOLATE SAUCE", 1.99]}

Это та часть словаря, где должны быть десерты.
Добавляется только последняя строка и цена.



Последнее исправление: hibiscusM (всего исправлений: 1)
Ответ на: комментарий от slovazap

в принтах видно, что распозналось отлично, 'href', 'tracker' , 'digits' добавлены мной нарочно для понимания, что происходит.

append() не работает

hibiscusM
() автор топика
Ответ на: комментарий от slovazap

story.txt - это отдельный файл с десертами, у меня нескольких файлов txt, из которых текст распознается разными частями кода.

hibiscusM
() автор топика

d['Dessert']=[]

Это вообще как понимать? d это вообще что?

Andreezy ★★
()

Такс, про парсеры уже писали, поэтому давай разберем ту жесть которую ты написал. У тебя в первом условии для каждой итерации создается список, а потом в него аппендится строка. Это уже звучит достаточно тупо, особенно если учесть что можно сразу создать список со строкой, ну или хотябы вынести инициализацию за цикл. Окей, если это условие не отработало до следующих, то будь готов огрести в рантайме эксепшен, потому что у None нет метода append.

А это вообще зачем ?

                    tracker=0
                else:
                    tracker=0

Dred ★★★★★
()
Последнее исправление: Dred (всего исправлений: 1)
Ответ на: комментарий от Dred

ну да идиотизм и что? )Вынесу за цикл. Спасибо. Это не окончательный вариант, я дописываю или меняю в процессе работы. Изначально у меня было по-другому это релизовано и отлажно неделю назад с defaultdict, но позже этот код был переписан по другому , так как с ним не получалось сделать автоматическое заполнение таблиц. Я не помню зачем там

      else:
          tracker=0 
надо посмотреть.

hibiscusM
() автор топика
Ответ на: комментарий от hibiscusM

Если ты глядя на свой код не понимаешь зачем он, то этот код организован хреново, нужно думать над тем что ты делаешь и как ты это структурируешь иначе будешь ловить косяки не понимать как их чинить, потому что не знаешь как работает твой же код. Ну или хотя бы комментарии оставляй.

и что

это привело к тому, что ты полез сюда создавать тему вместо подумать головой. Потому что любому ясно, глядя на то что ты сам выложил, что в словаре у тебя остается результат последней итерации

Dred ★★★★★
()
Ответ на: комментарий от Dred

Я ж говорю, этот код был где-то неделю назад сделан, отлажен, потом переписан и забыт. А сегодня получилось-таки заполнить автоматически БД и вдруг выяснилось, что таблица Десерты по каким-то причинам не заполнилась, т.е там только один объект. И вообще у меня сегодня 2 часа сна было, так что мне простительно.

hibiscusM
() автор топика
Ответ на: комментарий от Dred

А это вообще зачем ?

                    tracker=0
                else:
                    tracker=0

Вот часть содержимого файла story.text.


<a href="/menu/coconut-grande/prod4460035" id="menuItemId">Coconut Grande</a>
</p>
<p class="list-dish-desc-details">
A coconut lover's dream. Warm coconut cake topped with coconut-pineapple ice cream, fresh pineapple and toasted coconut, served in a fresh coconut.
</p>
<span class="pdt-text pull-left dar-menucal" >
 760 cal </span>

<a href="/menu/mango-sorbet-with-tropical-fruit/prod863143" id="menuItemId">Mango Sorbet with Tropical Fruit</a>

</p>

<p class="list-dish-desc-details">

</p>
<span class="pdt-text pull-left dar-menucal" >
 150 cal </span>

В одном месте сразу после

<p class="list-dish-desc-details"> 
идет описание продукта, а в другом месте - пустая строка (\n) и нет описания. Но исходный вариант - ужасен, поэтому так, наверное, лучше

            elif tracker==1:
                if line != '\n':
                   d['Dessert'].append(line.rstrip('\n'))
                tracker=0
hibiscusM
() автор топика

Как можно осилить регулярки и не осилить найти нормальный html-парсер?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.