• Как sys.stdin, который выглядит как словарь превратить в словарь?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Так делать нельзя:
    dict = json.loads(str(sys.stdin))
    Нужно либо так:
    dict = json.load(sys.stdin)
    либо так:
    dict = json.loads(sys.stdin.read())
    Приведите остальной код тоже. Там наверняка такие же ошибки.
    Ответ написан
    Комментировать
  • Как перепарсить словарь python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Элементарно. Итерируйтесь по парам ключ-значение уидов и по соответствующим ключам запрашивайте в словаре дат нужные даты, формируйте новые словари и складывайте их в список. результат дампьте в json.

    Если вам не понятны эти слова, то вам рано решать эту задачу самостоятельно, следует подучить питон или идтик фрилансерам.
    Ответ написан
    Комментировать
  • Как посчитать количество суб-объектов в Python для каждого XML-объекта?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы можете сделать это за два прохода.
    На первом проходе просто собираете множество всех возможных уникальных тегов. Я бы просто записывал в словарь True по ключу, равному имени каждого попавшегося тега на первом проходе.
    В результате вы получите словарь уникальными именами в ключах, причем эти ключи будут в том порядке, в каком они встречались в XML (иногда это просто удобно, что они не в рандомном порядке).
    Имея общий набор имён вы можете воспользоваться стандартным способом записи в CSV в виде словарей.
    Останется лишь конвертировать каждый узел из вашего файла в словарь. Никаких сторонних библиотек не нужно.
    Ответ написан
    1 комментарий
  • Обращение к записи БД требует некоторой обработки. Что лучше: обработать в скрипте, который обратился, или в хранимой процедуре в БД?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Прежде чем всё это усложнять описанным вами способом, необходимо определиться с ожидаемыми количествами. Насколько много всего будет переменных, насколько много может быть этих объектов, какие ожидаются частоты этих ваших обращений.
    Ещё нужно определиться как вы планируете редактировать наборы изменяемых переменных. Запишете прямо в БД руками, или нужно делать API для редактирования списков?
    Вы собираетесь скрипт запускать при каждом поступлении новой порции данных? Может правильнее запустить его на ожидание порций из пайпа? Или АПИ сделать поверх http.

    По существу вопроса. Минус хранимых процедур в том, что это код, который хранится вместе с данными. Нужно делать отдельные специфические "приседания", чтобы правильно деплоить и обновлять такой код, хранить его в системе контроля версий, мигрировать от версии к версии...
    Быстродействие в обоих случаях будет зависеть от конкретных действий, которые вы будете каждый раз повторять при "обращениях". Однако при наличии "бутылочного горлышка" в этом месте при реализации через хранимые процедуры вы уже мало что там можете сделать. А вот в коде на питоне можно при необходимости добавить воркеров и таски на длительные операции передавать им через очередь.

    В целом задача звучит так, будто делать её надо максимально простым способом без предварительной оптимизации, которая, скорее всего, и не пригодится. Оптимизировать нужно по факту, когда понятно станет где будут проблемные места.
    Ответ написан
    Комментировать
  • Автоматизация верстки в полиграфии, поможете)?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Я похожие задачи решал так:
    - В Inkscape готовился макет документа в svg-формате. Внутри SVG - это обычный текстовый XML-файл.
    - Потом на его основе строился шаблон, мы использовали стандартный шаблонизатор джанго, но можно взять и сторонний, например Jinja или любой другой, тысячи их. У нас структура документа была гораздо сложнее вашей и я использовал многоуровневые шаблоны для разных фрагментов документа. Да, WISIWIG редактирования шаблонов добиться не получилось, но такая задача была не критичной. В вашем случае шаблон получается тривиальным и можно даже подстановку делать на уровне строк, только экранирование нужно аккуратно сделать.

    Это всё лет десять назад уже делалось. Сейчас может быть есть инструменты поудобнее. Не следил за новостями в этом направлении.
    - Далее шаблон рендерится заполняясь данными из контекста, и итоговый SVG-документ обрабатывается headless инстансом редактора Inkscape, который крутился на отдельной виртуалке, а позднее запускался в docker-контейнере. Это фактически запуск Inkscape -A document.svg document.pdf, при котором документ преобразуется в pdf-файл.
    В итоге полученные pdf опционально собираются в один, чтобы сделать многостраничный документ и его удобнее было печатать. Не помню какая библиотека для этого использовалась, но задача распространённая и простая, найдёте.
    Ответ написан
    Комментировать
  • OSError: [WinError 193] %1 не является приложением Win32 - как решить?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Нужно посмотреть что у вас в "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\numpy\_distributor_init.py"
    Откуда берется значение filename. Возможно туда попадает не путь к dll, а плейсхолдер %1 из какого-нибудь скрипта при некорректной установке библиотеки.
    Ответ написан
    Комментировать
  • Стоит ли изучать Machine Learning если хочется создавать видеоигры?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Не волнуйтесь, специалистов ML ИИ заменит первым=). А ещё раньше все машины и самолёты будут исключительно с автопилотами, потому что водителей заменить проще, чем программистов.
    Программист должен быть готов постоянно учиться, если вы не готовы, то идите лучше водителем, они тоже не скоро будут вытеснены ИИ. На наш век любой работы хватит. Даже лифтёром или телеграфистом, я уверен, еще можно где-нибудь устроиться.
    Нравится ML - занимайтесь им, вы же в индустрии, вы в одиночку пилите инди-игры? Серьёзные игры пишут большая команда. Если б вы хотели быть строителем, то вы вполне могли бы не разбираться в устройстве черепичной кровли, если достаточно хорошо кладёте кирпич или штукатурите. Все работы хороши, выбирай на вкус те, в которых интересно будет развиваться.
    Ответ написан
    3 комментария
  • Какой запрос возвращает сумму продаж самого дорогого товара?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Добавьте сортировку по цене товара и ограничение выборки first 1.
    Цену товара и идентификатор тоже придётся добавить в группировку. Порядок группировки не важен.
    А из вашего условия нужно убрать равенство цены
    Ответ написан
  • Как сопоставить цену с одного JSON к другому?

    trapwalker
    @trapwalker
    Программист, энтузиаст
     А в чем, собственно, проблема? Разделите строку с техникой на абзацы и ищите получившиеся строки в своём прайсе. Что представляет сложность для вас? Разбить строку по символу абзаца? Перебрать получившиеся элементы? Поискать каждый в словаре? Просуммировать найденные цены?
    Ответ написан
    Комментировать
  • Как приложение на flask перевести с локалхост на другой домен?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    На всякий случай напомню, что если хотите разместить ваше приложение за доменом вам нужно:
    - купить домен у регистратора (простите, но, судя по вопросу, не очевидно, что вы это сделали),
    - разместить ваше приложение на машине с белым IP (заказать его у вашего провайдера или арендовать виртуальную машину у какого-нибудь хостера. Можно еще с dyndns повозиться, но это более сложный путь)
    - прописать ip вашей машины у доменного хостера добавив A-запись за вашим доменом.
    - на вашей машине с белым ip запустить приложение например на 80 порту (если не нужен ssl) и убедиться, что файрволл не не закрывает его.

    Однако если вы фласк будете публиковать так напрямую, ничего хорошего из этого не выйдет.
    В принципе, с этого момента ваше приложение будет торчать портом наружу и доступно через домен.
    Но часто нужно кроме приложения раздавать статику и заворачивать трафик в ssl `(для https). Для этого на машине запускают еще nginx или другой проксирующий веб-сервер. Через него вы и flask можете раздавать по uwsgi.
    Ответ написан
    8 комментариев
  • Как пакетно отредактировать множество фотографий?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Ещё можно воспользоваться imageMagic'ом и править фотки скриптом.
    Ещё можно сделать скрипт на питоне и воспользоваться библиотекой PIL для редактирования. Самый наглядный и управляемый способ на мой взгляд.
    Ответ написан
    Комментировать
  • Как проще всего представить простой форматированный текст в Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Какие-то у вас требования сранные. Кому будет утомительно? Вы вручную конвертировать планируете? Или остерегаетесь по поводу алгоритмической сложности преобразования? Конвертация - это изолированная и хорошо тестируемая задача. Разметка на основе XML даст вам максимальную гибкость и универсальность, всегда можно игнорировать те или иные возможности форматирования и не потерять какие-то нюансы. Можно надобавлять свои неймспейсы и атрибуты в них. Маркдаун такого гарантировать не сможет.
    Что значит "по дереву тегов набегаешься"? Вы в ручную бегать собираетесь?
    Куда и зачем вам надо конвертировать? Как-то эту важную часть вы оставили за скобками.
    Обратно тоже потребуется? Есть ли требование идентичности при двойном преобразовании?
    Используйте XML и не морочьте себе голову. Общий формат должен быть максимально строгим, документированным, однозначным и универсальным. Лучше XML вы тут ничего не найдёте. Если в какой-то момент у вас в одном из форматов встретится какое-то особое форматирование (подчеркивание волнистой линией какое-нибудь), то в XML добавить новый тег или атрибут не составит труда, чтобы сохранить информацию и не нарушить обратную совместимость, а вот с зоопарком диалектов маркдауна вы намучаетесь изрядно.
    Ответ написан
    Комментировать
  • Как упростить однострочный if?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    CONVERSATION2PEER_GAP = 2_000_000_000
    conversation_id = int(conversation_id)  # Почему у вас где-то идентификаторы хранятся интом,
    # а где-то текстом? Нужно стремиться к стандартизации и избегать таких неконсистентных нюансов.
    # Если там не может быть другого текста, то следует приводить к числу сразу когда возможно.
    peer_id = event.object['message']['peer_id']
    if peer_id != conversation_id + CONVERSATION2PEER_GAP:
         continue
    Ответ написан
    Комментировать
  • Как из строки восстановить список?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ещё можно сериализовать\десериализлвать этот список в \из json.
    huge_string = json.dumps(huge_list)
    restored_list = json.loads(huge_string)
    Ответ написан
    Комментировать
  • Как сохранить JSON с кириллицей, чтобы она читалась?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Почитайте спецификацию. Если вы не научитесь этим пользоваться, то не сможете программировать.

    Help on function dumps in module json:
    
    dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
        Serialize ``obj`` to a JSON formatted ``str``.
        
        If ``skipkeys`` is true then ``dict`` keys that are not basic types
        (``str``, ``int``, ``float``, ``bool``, ``None``) will be skipped
        instead of raising a ``TypeError``.
        
        If ``ensure_ascii`` is false, then the return value can contain non-ASCII
        characters if they appear in strings contained in ``obj``. Otherwise, all
        such characters are escaped in JSON strings.
        
        If ``check_circular`` is false, then the circular reference check
        for container types will be skipped and a circular reference will
        result in an ``OverflowError`` (or worse).
        
        If ``allow_nan`` is false, then it will be a ``ValueError`` to
        serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) in
        strict compliance of the JSON specification, instead of using the
        JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).
        
        If ``indent`` is a non-negative integer, then JSON array elements and
        object members will be pretty-printed with that indent level. An indent
        level of 0 will only insert newlines. ``None`` is the most compact
        representation.
        
        If specified, ``separators`` should be an ``(item_separator, key_separator)``
        tuple.  The default is ``(', ', ': ')`` if *indent* is ``None`` and
        ``(',', ': ')`` otherwise.  To get the most compact JSON representation,
        you should specify ``(',', ':')`` to eliminate whitespace.
        
        ``default(obj)`` is a function that should return a serializable version
        of obj or raise TypeError. The default simply raises TypeError.
        
        If *sort_keys* is true (default: ``False``), then the output of
        dictionaries will be sorted by key.
        
        To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
        ``.default()`` method to serialize additional types), specify it with
        the ``cls`` kwarg; otherwise ``JSONEncoder`` is used.
    Ответ написан
    Комментировать
  • Можно ли сделать переменную глобальной в функции?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вообще глобальные переменные – это плохо и ведёт в ряде случаев к типичным, но трудно уловимым и неочевидным багам.
    Если вам нужно, чтобы разные вызовы разных функций имели доступ к одной и той же переменной, нужно этим функциям передать контекст. Контекстом может служить объект, куда всё необходимое добавлено в виде аргументов.
    Нужно помнить о необходимости правильно и своевременно инициализировать контекст.
    Думаю у aiogram есть штатный способ передачи контекста в обработчики, но в простых случаях достаточно сделать глобальную переменную и при запуске инициализировать в ней контекст. Так вам не придётся декларировать ее как глобальную в функциях, она будет найдена при обходе неймспецсов.
    Присвоения будут внутри контекста, а глобальная переменная останется неизменной.
    Ответ написан
  • Как правильно составить регулярное выражение?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вы непонятно формулируете задачу.
    Только буквы, а потом только цифры, а затем точка, пробел и дефис? Или это может быть вперемежку?
    Если последовательно, то так и пишите:
    [a-zA-Z]+[0-9]+\.\s-
    Если это всё нужно вперемежку, то ваш вариант годится.
    Ответ написан
  • Как сделать Telegram бота для поиска сообщений в канале?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А в чем конкретно проблема?
    Бот индексирует сообщения и держит индекс в памяти. По запросу пользователей ищет сообщения в индексе, вынимает из него идентификатор сообщения и цитирует запросившему нужное сообщение из канала.
    Ответ написан
    Комментировать
  • Как исправить код телеграмм бота, чтобы вместо всей информации о погоде можно было выводить( с помощью команд) отдельные данные погоды?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    1. Добавить новые команды.
    2. Выводить по ним частичные данные.
    Ответ написан
    Комментировать