Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
15 / 13 / 4
Регистрация: 13.05.2021
Сообщений: 158

Как сравнить цены из 2 json файлов

02.11.2021, 17:04. Показов 4040. Ответов 3

Студворк — интернет-сервис помощи студентам
Здравствуйте, как сделать чтобы проводилась проверка из первого json файла со вторым по названию, если не был найден не один товар с таким названием, то с ним ничего не делается, а если был найден, то проводится проверка по ценнику и если ценник во втором файле оказался меньше, то это записывается в отдельный json файл?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
headers = Headers(os='lin', headers=True).generate()
    main_dict = {}
    count = 0
    for page in range(1, 17):
        try:
            url = f"https://blacktyres.ru/catalog-disks/podbor-diskov-po-avto/lada/vesta/{page}/"
            preurl = 'https://blacktyres.ru/'
            r = requests.get(url=url, headers=headers)
            soup = BeautifulSoup(r.text, 'lxml')
 
            cards = soup.find_all('div', class_='catalog-product-wrap')
            for card in cards:
                first_card_name = card.find('a', class_='product-link product-name').find('b').text.strip()
                second_card_name = card.find('a', class_='product-link product-name').text.strip()
                all_card_name = f"{first_card_name} {second_card_name}"
                first_card_price = card.find('div', class_='product-price').find('b').text.strip()
                second_card_price = card.find('div', class_='product-price').find('rb').text.strip()
                all_card_price = f"{first_card_price} {second_card_price}"
                card_href = card.find('a', class_='product-link product-name').get('href')
                card_url = preurl + card_href
 
                response = requests.get(url=card_url, headers=headers)
                bs4 = BeautifulSoup(response.text, 'lxml')
 
                try:
                    got_card = bs4.find('ul', class_='delivery').find('li').text.strip().replace('\n', ' '). replace('Вналичии', 'В наличии').replace(' ', ':').replace('В:наличии', ' В наличии')
                    main_dict[count] = {
                        'card_name': all_card_name,
                        'card_price': all_card_price,
                        'card_url': card_url,
                        'got_card': got_card
                    }
 
                except:
                    main_dict[count] = {
                        'card_name': all_card_name,
                        'card_price': all_card_price,
                        'card_url': card_url
                    }
к примеру, в первом json, который более старый, записано следующее:
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
"0": {
        "card_name": "Диски Skad Диски Skad Нагоя 6x16/4x100 D60.1 ET50 Селена",
        "card_price": "6 930 ₽",
        "card_url": "https://blacktyres.ru//catalog-disks/vendor/Skad/model-11167/73223/",
        "got_card": "Наличие: В наличии"
    },
    "1": {
        "card_name": "Диски ТЗСК Диски ТЗСК Lada Largus 6x15/4x100 D60.1 ET50 Черный",
        "card_price": "1 969 ₽",
        "card_url": "https://blacktyres.ru//catalog-disks/vendor/TZSK/model-12164/80424/",
        "got_card": "Наличие: В наличии"
    },
    "2": {
        "card_name": "Диски ТЗСК Диски ТЗСК Lada Largus 6x15/4x100 D60.1 ET50 Серебро",
        "card_price": "2 034 ₽",
        "card_url": "https://blacktyres.ru//catalog-disks/vendor/TZSK/model-12164/80487/",
        "got_card": "Наличие: В наличии"
    },
а во второй например:
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
"0": {
        "card_name": "Новые диски",
        "card_price": "6 930 ₽",
        "card_url": "https://blacktyres.ru//catalog-disks/vendor/Skad/model-11167/73223/",
        "got_card": "Наличие: В наличии"
    },
    "1": {
        "card_name": "Диски ТЗСК Диски ТЗСК Lada Largus 6x15/4x100 D60.1 ET50 Черный",
        "card_price": "999 ₽",
        "card_url": "https://blacktyres.ru//catalog-disks/vendor/TZSK/model-12164/80424/",
        "got_card": "Наличие: В наличии"
    },
    "2": {
        "card_name": "Диски ТЗСК Диски ТЗСК Lada Largus 6x15/4x100 D60.1 ET50 Серебро",
        "card_price": "2 034 ₽",
        "card_url": "https://blacktyres.ru//catalog-disks/vendor/TZSK/model-12164/80487/",
        "got_card": "Наличие: В наличии"
    },
и в файл sale.json запишется:
JSON
1
2
3
4
5
6
"1": {
        "card_name": "Диски ТЗСК Диски ТЗСК Lada Largus 6x15/4x100 D60.1 ET50 Черный",
        "card_price": "999 ₽",
        "card_url": "https://blacktyres.ru//catalog-disks/vendor/TZSK/model-12164/80424/",
        "got_card": "Наличие: В наличии"
    },
помогите, пожалуйста
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.11.2021, 17:04
Ответы с готовыми решениями:

Как получить данные из JSON и сравнить их с данными со страницы?
Добрый день, пожалуйста, скажите мне. Я написал календарь, и теперь у меня есть файл json, в котором содержится информация о событиях, я...

Как проанализировать 2 файла json и сравнить их, используя Python?
Есть приложение, на странице которого выводятся иконки других приложений. Они выводятся двумя способами. Надо сравнить эти способы. Для...

Сравнить цены
Помогите дописать код. Нужно сравнить цены у трех клиентов и вывести на экран данные клиента с максимальной стоимостью и с минимальной. ...

3
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
02.11.2021, 17:44
Лучший ответ Сообщение было отмечено Alina Zolotova как решение

Решение

Alina Zolotova,
записать останется в файлик
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import json
 
 
def to_int(value: str) -> int:
    return int(value.rstrip(' ₽').replace(' ', ''))
 
 
with open('first.json', encoding='UTF-8') as first, open('second.json', encoding='UTF-8') as second:
    first_json = json.load(first)
    second_json = json.load(second)
 
result = {}
for pair in first_json.items():
    for second_pair in second_json.items():
        if pair[1]['card_name'] == second_pair[1]['card_name']:
            first_price = to_int(pair[1]['card_price'])
            second_price = to_int(second_pair[1]['card_price'])
            if first_price < second_price:
                result[pair[0]] = pair[1]
            else:
                result[second_pair[0]] = second_pair[1]
 
print(result)
1
15 / 13 / 4
Регистрация: 13.05.2021
Сообщений: 158
02.11.2021, 22:36  [ТС]
Welemir1, Спасибо большое, очень полезный код для на практике много где может понадобиться

Добавлено через 1 час 4 минуты
сделала такую вариацию, спасибо Welemir1.
Python
1
2
3
4
5
6
7
8
9
10
11
12
with open(f"data/{counter - 1}_products.json") as first, open(f"data/{counter}_products.json") as second:
    first_json = json.load(first)
    second_json = json.load(second)
 
result = {}
for pair in first_json.items():
    for second_pair in second_json.items():
        if pair[1]['card_name'] == second_pair[1]['card_name']:
            first_price = to_int(pair[1]['card_price'])
            second_price = to_int(second_pair[1]['card_price'])
            if first_price > second_price:
                result[second_pair[0]] = second_pair[1]
Добавлено через 8 минут
Welemir1, а что если кол-во товаров изменится? Например добавится товар, из-за чего товар который был на 15 строчке, окажется на 16 или 20 и тд. Как реализовать, чтобы скрипт не шёл по циклу, а искал совпадение по названию, а потом уже сверял
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
03.11.2021, 06:59
Alina Zolotova, ничего не понял. ПРограмма и так сверяет по названию, строки значения не имеют. Как это делать без циклов не знаю. Чтобы понять самой - надо основы питона подтянуть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.11.2021, 06:59
Помогаю со студенческими работами здесь

Как сравнить название файлов
Сразу говорю, что новичок, только разбираюсь с возможностями кьюта Как сравнить названия файлов, если есть, например файл...

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

Как сравнить длину двух текстовых файлов
Всем привет. Я делаю шифр Виженара, и мне надо сравнить длину input.txt с длиной key.txt. Помогите, пожалуйста Добавлено через 21...

Как сравнить текст из memo с текстами файлов в папке?
Здравствуйте! Как сравнить текст из memo с текстами файлов на наличие схожести , которые есть у меня в папке на компьютере? Если есть...

Не получается сравнить 2 JSON
JSON имеют разную структуру, но в обеих поля с ФИО, по нему и сравниваю. Мне надо в 1 JSON убрать все записи где значение ФИО повторяется...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru