Ответы пользователя по тегу Python
  • Диапазон в SQLAlchemy?

    @pcdesign
    Можно вот так попробовать:
    number = Column(db.Enum('1', '2', '3'), unique=False)  # И т.д.  Ну или list(range(1,11)) засунуть.


    Ну то есть жестко задать с помощью Enum возможные значения.
    Ответ написан
    Комментировать
  • Как в python проверить дату, что она входит в диапазон: текущий квартал или предыдущий квартал +25 дней?

    @pcdesign Автор вопроса
    Накидал как-то так.
    Вроде работает.
    from datetime_periods import period
    from dateutil.parser import parse
    import math
    import datetime
    
    current_date = datetime.datetime.now()
    
    
    def get_num_quarter(ref):  # Возвращает номер квартала
        return math.ceil(ref.month/3.)
    
    
    def start_end_quarter(ref):  # Возвращает первый и последний день квартала
        return period(ref, 'quarter')
    
    
    def previous_quarter(ref):  # Возвращает 1-ый день предыдущего квартала
        quarter = (ref.month - 1) // 3
        prev_quarter = (quarter - 1) % 4
        return datetime.datetime(ref.year if quarter > 0
                                 else ref.year-1, prev_quarter*3+1, 1)
    
    dates = "2015-07-10 2015-03-07 2015-06-25 2015-04-21 2014-07-30".split(" ")
    
    for d in dates:
        date_obj = parse(d)
        # Проверяем входит ли дата в текущий квартал
        if (current_date.year == date_obj.year
                and get_num_quarter(date_obj) == get_num_quarter(current_date)):
            print(d + " - Входит. Т.к. дата относится к текущему кварталу")
            continue
    
        # Проверяем условие: предыдущий кв. + 25 дней
        prev_date = previous_quarter(current_date)
        start = start_end_quarter(prev_date)[0]
        end = start_end_quarter(prev_date)[1] + datetime.timedelta(days=25)
        if start < date_obj and current_date < end:
            print(d + " - Входит. Т.к. предыдущий кв. + 25 дней еще не закончились")
        else:
            print(d + " - Не входит в диапазон")


    Результат:
    2015-07-10 - Входит. Т.к. дата относится к текущему кварталу
    2015-03-07 - Не входит в диапазон
    2015-06-25 - Входит. Т.к. предыдущий кв. + 25 дней еще не закончились
    2015-04-21 - Входит. Т.к. предыдущий кв. + 25 дней еще не закончились
    2014-07-30 - Не входит в диапазон
    Ответ написан
    Комментировать
  • Python, web. Есть ли что-то между CGI и Flask?

    @pcdesign
    Flask - это микрофреймворк. Почему это он громоздкий?

    Это если бы ради "веб-мордочки с двумя полями и тремя кнопками" решили бы городить огород с Django, тогда замечание о громоздкости было бы уместно.
    Ответ написан
    Комментировать
  • Ошибка invalid syntax, почему появляется?

    @pcdesign
    Мне кажется здесь у вас ломается:
    >>> x = ‘Spam!’
      File "<stdin>", line 1
        x = ‘Spam!’
                ^
    SyntaxError: invalid character in identifier


    Надо использовать кавычки типа " или '
    Ответ написан
    Комментировать
  • Какой аналог Perl модуля (URI::Escape::JavaScript) в Python3?

    @pcdesign Автор вопроса
    На коленке нашел такое решение:

    import json
    import re
    
    query = "яблоко"
    esc = json.dumps(query).upper()
    p = re.compile(r"\\U", re.I)
    esc = p.sub('%u', esc)
    print(esc)


    Результат:
    %u044F%u0431%u043B%u043E%u043A%u043E

    Но как-то мне все это не нравится.
    Ответ написан
    Комментировать
  • Как найти похожие слова в списке?

    @pcdesign Автор вопроса
    Ну как-то вот так получилось:

    import difflib
    
    
    def similar(arr):
        s = difflib.SequenceMatcher()
        full = []
        for i in arr:
            s.set_seq2(i)
            for n in (arr):
                if n == i:
                    continue
                s.set_seq1(n)
                full.append((s.ratio(), n))
                full.sort(reverse=True)
    
        print("### Отладка ### Сколько каждое слово набрало очков похожести")
        for score, i in full:
            print(i + str(score))
    
        return full[0]
    
    arr = ['голубец', 'конь', 'голубцы', 'лист']
    print("Итоговый результат:" + similar(arr)[1])
    
    arr = ['стол', 'день', 'свет', 'клинок', 'светильник']
    print("Итоговый результат:" + similar(arr)[1])
    
    arr = ['восток', 'дань', 'исток', 'жир', 'голубь', 'да']
    print("Итоговый результат:" + similar(arr)[1])


    Результат работы:
    ### Отладка ### Сколько каждое слово набрало очков похожести
    голубцы0.8571428571428571
    голубец0.8571428571428571
    лист0.18181818181818182
    лист0.18181818181818182
    конь0.18181818181818182
    конь0.18181818181818182
    голубцы0.18181818181818182
    голубцы0.18181818181818182
    голубец0.18181818181818182
    голубец0.18181818181818182
    лист0.0
    конь0.0
    Итоговый результат:голубцы 
    
    ### Отладка ### Сколько каждое слово набрало очков похожести
    светильник0.5714285714285714
    свет0.5714285714285714
    стол0.5
    свет0.5
    стол0.42857142857142855
    светильник0.42857142857142855
    светильник0.375
    светильник0.2857142857142857
    день0.2857142857142857
    свет0.25
    день0.25
    стол0.2
    клинок0.2
    клинок0.2
    день0.2
    клинок0.125
    стол0.0
    свет0.0
    клинок0.0
    день0.0
    Итоговый результат:светильник
    
    ### Отладка ### Сколько каждое слово набрало очков похожести
    исток0.7272727272727273
    восток0.7272727272727273
    дань0.6666666666666666
    да0.6666666666666666
    исток0.25
    жир0.25
    дань0.2
    голубь0.2
    исток0.18181818181818182
    голубь0.18181818181818182
    голубь0.16666666666666666
    восток0.16666666666666666
    исток0.0
    исток0.0
    жир0.0
    жир0.0
    жир0.0
    жир0.0
    дань0.0
    дань0.0
    дань0.0
    да0.0
    да0.0
    да0.0
    да0.0
    голубь0.0
    голубь0.0
    восток0.0
    восток0.0
    восток0.0
    Итоговый результат:исток
    Ответ написан
    Комментировать
  • Как правильно составить sql-запрос с параметрами?

    @pcdesign
    Я попробовал у себя
    date = '31/01/2015'
    date_format = '%d/%m/%Y'
    g.cur.execute("""SELECT * FROM `per` WHERE DATE_FORMAT(`date_sf`, %s) = %s""",
                        (date_format, date))
    rows = g.cur.fetchall()
    print(rows)

    Так работает.
    Ну и еще применительно к алхимии.
    Вот так работает:
    date = '01/01/2015'                                                           
    date_format = '%d/%m/%Y'                                                      
    sql = """SELECT * FROM `users` WHERE DATE_FORMAT(`date`, '%s') = '%s' """ % (date_format, date)                                                       
    rows = db.session.execute(sql)


    И есть вот такой еще путь.
    Имхо, самый правильный:
    from sqlalchemy import text
    rows = db.session.execute(text("SELECT * FROM `users` WHERE  DATE_FORMAT(`date`, :df) = :date "), 
    {"df": '%d/%m/%Y', "date": '01/01/2015'})
    Ответ написан
    2 комментария
  • Python3.х. Как в windows получить список: "название сетевого адаптера" - "ip адрес"?

    @pcdesign Автор вопроса
    import wmi
    
    wmi_obj = wmi.WMI()
    wmi_sql = "select IPAddress, Description from Win32_NetworkAdapterConfiguration"
    wmi_out = wmi_obj.query( wmi_sql )
    
    for dev in wmi_out:
        try:
            dev.IPAddress[0]
        except TypeError:
            print(dev.Description, "- None")
        else:
            print( dev.Description, "IPv4Address:", dev.IPAddress[0])


    Результат работы:

    WAN Miniport (SSTP) - None
    WAN Miniport (IKEv2) - None
    WAN Miniport (L2TP) - None
    WAN Miniport (PPTP) - None
    WAN Miniport (PPPOE) - None
    WAN Miniport (IPv6) - None
    WAN Miniport (Network Monitor) - None
    Устройства Bluetooth (личной сети) - None
    WAN Miniport (IP) - None
    RAS Async Adapter - None
    Адаптер Microsoft ISATAP - None
    Realtek PCIe FE Family Controller - None
    Адаптер Microsoft ISATAP - None
    Intel(R) Centrino(R) Wireless-N 2230 IPv4Address: 192.168.1.34
    TAP-Windows Adapter V9 - None
    Microsoft Virtual WiFi Miniport Adapter - None
    Адаптер Microsoft ISATAP - None
    Microsoft Virtual WiFi Miniport Adapter - None
    Ответ написан
    Комментировать
  • Fail2ban — Received MemoryError()

    @pcdesign Автор вопроса
    Проблема была в selinux.
    Вечно я про него забываю.
    Ответ написан
    Комментировать