Сравнения прайс-листов

Тема в разделе "Python", создана пользователем MGT1, 4 сен 2016.

  1. MGT1

    MGT1

    Регистрация:
    5 янв 2013
    Сообщения:
    900
    Симпатии:
    218
    И так как решить вопрос:
    Есть прайс-лист новый

    И старый


    Нужно сравнить:
    1. Цена с графы D (есть ли в каких-то изменения)
    2. Есть ли новый товар, к примеру по графе B (код товара) или же по названию.
     
  2. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Вот для начала сравнение цен:

    python:
    	    
    from openpyxl import load_workbook
    from pprint import pprint


    files = ['path/price_old.xlsx', 'path/price_new.xlsx']


    def load_sheets_from_file(file_name):
    wb = load_workbook(filename=file_name, read_only=True)
    for s in wb.worksheets:
    yield s


    def load_sheet(sheet):
    sheet_data = dict()
    for row in sheet.rows:
    row_data = dict()
    if row[1].value:
    row_data['sku'] = row[1].value
    row_data['name'] = row[2].value
    row_data['price'] = row[3].value
    sheet_data.update({row_data['sku']: row_data})
    return sheet_data


    def load_data_from_file(file_name):
    file_data = dict()
    for sheet in load_sheets_from_file(file_name):
    file_data.update(load_sheet(sheet))
    return file_data


    def compare_prices(data_old, data_new):
    diff = []
    for sku, product in data_old.iteritems():
    if product['price'] != data_new[sku]['price']:
    diff.append(data_new[sku])
    return diff


    old_data = load_data_from_file(files[0])
    new_data = load_data_from_file(files[1])
    pprint(compare_prices(old_data, new_data))
    Если цены у каких-то позиций не совпадают (сопоставление идёт по sku), на выходе должно получиться нечто подобное:
    python:
    	    
    [{'name': u'Armani Slim Quartz Gold/Black', 'price': 9.0, 'sku': 101.0},
    {'name': u'Adidas Log 0927 Yelloy\\White', 'price': 4.5, 'sku': u'1063-0001'}]
    Цена здесь будет из нового прайса.

    В files надо вписать путь к старому прайсу и новому.

    И нужно установить библиотеку openpyxl, которая отвечает за работу с xlsx:
    Код:
    pip install openpyxl
     
    Lasted edited by : 16 окт 2016
  3. MGT1

    MGT1

    Регистрация:
    5 янв 2013
    Сообщения:
    900
    Симпатии:
    218
    И нужно установить библиотеку openpyxl, которая отвечает за работу с xlsx.

    Где ее брать и как установить? Простой прописки не хватает. Скачал openpyxl-2.4.0-b1.tar, питон в упор не хочет понимать что его надо установить, как не прописывал.
     
  4. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Выше под фразой про установку сразу и написано как (команда для pip).

    Более простой вариант (но не сильно правильный) - просто распаковать архив с библиотекой в ту же директорию, где лежит файл с программой.

    Для начала лучше всё же попробовать открыть командную строку винды и вбить туда команду установки через pip. Заодно узнаем, установился ли pip вместе с интерпретатором.
     
  5. MGT1

    MGT1

    Регистрация:
    5 янв 2013
    Сообщения:
    900
    Симпатии:
    218
    Через командную строку не идет (пип не признает командой)

    Через питоновскую командную - синтакс ерор, инвалид синтакс.
     
  6. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Нет, это команда именно для командной строки ОС, а не Пайтона.

    Вообще, я нагуглил сейчас, что начиная с 2.7.9 pip идёт в комплекте с интерпретатором, так что могу предположить, что произошла путаница с тем, что такое командная строка. То поле ввода, которое в меню Пуск - это не командная строка. Командная строка винды вызывается вводом в это поле команды - cmd.
     
  7. MGT1

    MGT1

    Регистрация:
    5 янв 2013
    Сообщения:
    900
    Симпатии:
    218


    Это я догадался. Может где-то на что-то нужно указать?
     
  8. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Наверное, установщик не прописал пути в окружение.
    Что командная строка пишет, если туда вбить просто python?
     
  9. MGT1

    MGT1

    Регистрация:
    5 янв 2013
    Сообщения:
    900
    Симпатии:
    218
    не является командой
     
  10. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Тогда идём в Control Panel->System->Advanced System Settings->Environment Variables (переменные окружения или как-то так).
    Находим там Path, как на скрине:
    [​IMG]
    и редактируем его:
    [​IMG]

    дописав к уже имеющейся строке это (точка с запятой вначале обызательна):
    Код:
    ;C:\Python27\Scripts
    Надо только проверить, что путь правильный.
     
  11. MGT1

    MGT1

    Регистрация:
    5 янв 2013
    Сообщения:
    900
    Симпатии:
    218
    Все верно - установилось. Опенкиксл установился.

    Только внимательно прописывайте папку куда устанавливали питон.
     
    Последнее редактирование: 6 сен 2016
  12. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    openpyxl установился?
    Программа сравнения прайсов запустилась?
     
  13. MGT1

    MGT1

    Регистрация:
    5 янв 2013
    Сообщения:
    900
    Симпатии:
    218
    И на последок - код вводить в питоне или в JetBrains PyCharm Community Edition 2016.2.2
     
  14. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Либо в IDLE, либо в PyCharm.
    Лучше сразу PyCharm. Только там может тоже быть проблема с путём к интерпретатору. Если будет ругаться, надо и в нём это настроить: File->Settings->Prodject {название проекта}->Prodject Interpreter. И здесь либо выбрать из списка, если он его видит, либо указать путь (и потом он уже будет в списке).