• Как спарсить svg картинки?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Нужно приводить полный стек трейс ошибки, а не только её текст.
    Вам нужно разбить imglink по вопросительному знаку и взять только левую часть.
    Ответ написан
    Комментировать
  • Почему программа не записывает данные в CSV файл?

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

    63727c6f21376150389635.png
    Ответ написан
    Комментировать
  • Что быстрее: json или sqlite?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вам следует более детально расписать чего вам нужно добиться.
    Сейчас вы пытаетесь сравнивать две совершенно разные функциональности.
    Сериализация json довольно не быстрая операция, но всё зависит от того, какой объём и каких данных вы будете сериализовать, а потом ка кхотите эти данныеиспользовать. sqlite размещает свою БД в файловой системе и там свои накладные расходы на ее использование, а сериализацию json можно делать в памяти, однако тут будет уже сиьно важно какие объёмы и в какой структуре у вас данные. Доступ к большому количеству однотипных записей в sqlite можно сделать по индексу, а json, если его прдставлять в виде строки, нужно сперва десериализовать в структуры данных. Это требует много памяти и никакого индекса на данном этапе у вас нет.

    В общем, вы не корректно поставили вопрос. поэтому на него нельзя ответить простым и понятным способом.
    Неьзя сравнивать тёплое с мягким.
    Ответ написан
    1 комментарий
  • Где лучше хранить БД? В докере или нет?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Дополню немного ответ Dr. Bacon, поскольку мне кажется он не так понял ваш вопрос, а вы, возможно, не так поняли суть проблемы.
    Под БД, например постгрес, обычно понимают две разные вещи:
    1) сами данные в файловой системе,
    2) сервер базы данных, который реализует сетевой интерфейс для работы с БД и правильным образом кладёт и читает данные в файловой системе.

    Так вот, сервер можно развернуть ка кна хостовой машине (как вы сказали "локально"), так и в докер-контейнере.
    Файлы БД можно разместить как в файловой системе контейнера, так и в локальной файловой системе, примонтированной внутрь контейнера.
    И тут полно нюансов.
    Давайте начнём с того, как правильно.
    Правиьным будет взять стандартный докер-образ сервера БД, сконфигурировать его через компоуз-файл, а размещение файлов БД примонтировать в виде отдельного volume.

    Что имел в виду Dr. Bacon. Он имел в виду, что если не монтировать файлы БД в volume, то они будут лежать внутри контейнера, а значит при его перезапуске все данные будут стерты, поскольку состояние файловой системы контейнера не принято хранить. Это одно из преимузеств докера - сделал образ унаследовав его от других образов, а потом при запуске контейнера он какждый раз как новенький.
    Ответ написан
    Комментировать
  • Как работать с конструкцией try except?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Сделайте ещё один вложенный цикл для попыток обработки каждого из элементов. Можно при успешном выполнении без ошибок выходить из внутреннего цикла досрочно, а при ошибке не выходить досрочно и цикл будет повторять попытки.
    Если бы у вас было побольше опыта программирования на питоне, я бы посоветовал бы вам вынести обработку одного элемента в отдельную функцию, а еще посоветовал бы поупражняться в написании декоратора `retry`, который будет оборачивать любую функцию в новую функцию и в случае ошибки повторять её запуск пока не будет исчерпан лимит попыток.
    По-моему такой пример или упражнение, кстати, и было в одной из книг Лутца. Но вам подойдёт практически любая, где рассматриваются основы языка.
    Ответ написан
    2 комментария
  • Можно ли написать OS на Python?

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

    В общем, писать ОС на питоне - очень странная идея, но и микроскопом теоретически можно попробовать "разминировать" противопехотную мину, особенно если привязать его к длинной штанге и снабдить зарядом взрывчатки, однако это чревато большими и бессмысленными страданиями.

    Простой ответ - нет, питон не предназначен для написания ОС, но использовать его для разработки большОго количества элементов ОС можно.
    Ответ написан
    2 комментария
  • Почему при обращении к @classmethod возникает NameError: name 'cls' is not defined?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    cls и self - это никакие не префиксы, а обычные перемнные. Они поступают в виде первого аргумента метода.
    Вы даже назвать их можете по-другому и ничего не поломается.
    Попробуйте, всё-таки, почитать книжку по питону по порядку, а не действовать методом тыка и не гадать на кофейной гуще.
    В функции zas у вас нет переменной cls, отсюда и NameError.
    Получить класс объекта можно с помощью функции type: type(self).infield()

    Ну и да, судя по всему, вы не поняли до конца для чего нужны классовые методы, а для чего обычные.
    Ктсати, Test().zas() отработает вполне корректно, не смотря на то, что это классовый метод, а вызывается он у инстанса. Просто классовому методу будет передан в аргумент класс, а не инстанс.

    Серёьзно. Бросайте пытаться разбираться в этом методом тыка и вопросов на QnA. Там дальше наследование, полиморфизм, множественное наследование, метаклассы... Вы всех задолбаете и будете этим заниматься целую вечность
    Ответ написан
    1 комментарий
  • Как написать SQL запрос, чтобы при нахождении одной записи с определенным значением поля, другие записи с таким же значением не выводились?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    SELECT * 
    FROM articles a
    WHERE NOT EXISTS(SELECT * FROM tag2article ta WHERE ta.tag_id = 5 AND ta.article_id = a.id)
    Ответ написан
    Комментировать
  • Случайно число от 0 до 5 и присвоить значение переменным?

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

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    С чего вы взяли, что i не меняется? То, что у вас не печатается ничего с i>0 - это не значит, что внешний цикл не работает. Это значит, что принт больше не выполняется.
    Вторая подсказка: у вас внутренний цикл по z, он один раз добегает до конца, но что дальше? Где вы сбрасываете z?
    Ответ написан
  • Telebot owm. Бот видит только 1 команду и опирается только на нее. Есть варианты решить данную проблему?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Знаете почему никто не хочет отвечать на ваш вопрос?
    Тут несколько причин. Сперва вы запостили код без форматирования. Вы не могли не заметить этого, но надолго оставили вопрос как есть. Это выглядит как неуважение к тем, кто мог бы ответить.
    Кроме того, прочитайте как вы сформулировали свой вопрос. Пришлось вникать, перечитывать текст несколько раз и и читать весь код, чтобы понять что вам надо. Неужели нельзя проще изложить?
    Третья причина - это отсутствие попытки решить проблему самостоятельно. Такое ощущение, что вы, как тут кто-то предположил уже, посмотрели какой-то видос и срисовали с ютуба кусочки кода, а они сходу не заработали. К черту попытки самостоятельно разобраться, да? Зачем нам отступать немного назад и пытаться разобраться сперва с базовыми вещами и более простыми примерами, верно? Вам надо сразу продуктъ написать! Сразу готовенькое.

    Давайте я вам дам, простите, непрошенный, совет как впредь решать такие проблемы.
    Упрощайте. Удалите из кода всё лишнее, оставьте минимум, который должен работать и если он не работает, то вы что-то не поняли на более ранних стадиях изучения предмета. Нет смысла разбираться в сложном, когда вы еще не понимаете простого. Вы удаляете ВСЁ лишнее: лишние импорты, лишние команды, лишние хендлеры. Оставляете базовый простой пример и пробуете. Не работает? Ищете мануал по своей библиотеке и там наверняка есть в точности такой пример, ведь он максимально простой. Сравните его со своим. В чем отличие?
    Думаю на этом этапе уже станет ясно.

    К примеру в вашем коде видно, что срабатывает только один хендлер на любой текст, но в коде именно так все и задекларировано. Любой текст - делаем приветствие. Если сообщение обработано, библиотека не задействует прочие хендлеры, даже если они тоже подходят.

    Но, повторюсь. Проблема глубже. Она не в хендлерах и не в декораторах, а в том, что надо сперва разбираться с простыми примерами, а потом переходить к более сложным. Учитесь читать документацию. Ролики в ютубе - плохой учитель. Успехов.
    Ответ написан
  • Существуют ли готовые устройства по автоматическому включению оборудования от наличия нагрузки у другого оборудования?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Выглядит так, будто можно поставить индукционный датчик тока на один из проводов управляющей нагрузки.
    Фктически это будет трансформатор с парой витков первичной обмотки, через которую питается управляющая нагрузка, и множеством витков вторичной. В цепь вторичной ставится диодный мост на диодах шоттки и подстроечный резистор по схеме делителя, чтобы настраивать порог срабатывания и маломощный полевой транзистор, или пару дарлингтона, которые будут реагировать на напряжение во вторичной цепи и управлять коммутировать твердотельное реле.
    В качестве последнего можно взять уот такие вот.
    Можно добавить ёмкий коненсатор в цепь параллельно низковольтному входу твердотельного реле, тогда оно будет включаться не сразу, а с задержкой, вычисляемой по формуле как тут.
    Или можно уже добавить отдельный таймер задержки розеточный для управляемой нагрузки. Продаётся в магазинах.

    Если управляющая нагрузка мощная, то всё это не такая и проблема. Так можно, к примеру, пылесос включать при включении гриндера и т.д. Сложнее селать более чувствительную схему, например, когда хочется управлять с помощью одной умной лампочки всей люстрой на 10 рожков, в которых 9 тупых лампочек и одна умная. При наличии тока через умную лампочку, можно было бы заитывать всю люстру, но такой небольшой ток не так-то просто надёжно детектировать, особенно без разрыва управляющей цепи.
    Ответ написан
    Комментировать
  • Хочу заняться программирование БПЛА/ ИИ на БПЛА, с чего начать?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    С лётных симуляторов. Выбирайте те, у которых есть API с телеметрией.
    Имея АПИ, можно пробовать писать код.
    Ответ написан
    Комментировать
  • Как делается такая гравитация в играх?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Это нулевой общий вектор гравитации для сцены.
    Ответ написан
  • Как декодировать JSON содержащий кириллицу?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Прогоните его через утилиту jq, например.
    Или пайпом через такую команду:
    py "json.dumps(json.load(sys.stdin), ensure_ascii=False)" < encrypted.json > uncrypted.json
    Ответ написан
    Комментировать
  • Как сделать такой перебор через itertools на Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Можно определить функцию инкремента для вашего "числа" с заданным набором "цифр" (алфавитом).
    Например так:
    def inc(s, ab='123abc'):
        if not s:
            return ''
        x = (ab.index(s[-1]) + 1) % len(ab)
        return (s[:-1] if x else inc(s[:-1])) + ab[x]

    Теперь вы для любой строки с заданным алфавитом можете вычислить следующую в алфавитном порядке.
    Для оптимизации скорости генерации лучше представить алфавит в виде словаря, а не строки:
    alphabet_dict = dict(enumerate(alphabet_string))
    alphabet_dict.update(zip(alphabet_string, range(len(alphabet_string))))

    Тогда в функции надо ab.index(...) заменить на ab[...].
    Теперь поиск индекса символа будет происходить за O(1).
    Ответ написан
    3 комментария
  • Нужен простой hex-редактор или программа патчер?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Держите вот я написал вам такую утилиту:
    #!/usr/bin/python3
    
    
    def patch_file(patch_fn, dest_fn, offset=0, limit=None):
        with open(patch_fn, 'rb') as patch_file, open(dest_fn, 'rb+') as dest_file:
            patch = patch_file.read()[:limit]
            dest_file.seek(offset)
            dest_file.write(patch)
    
    
    if __name__ == '__main__':
        import sys
        args = sys.argv[1:]
        if args:
            args[2:] = [int(v) for v in args[2:]]
            print(args)
            patch_file(*args)
        else:
            print(f'{sys.argv[0]} <PATCH_FILE_NAME> <DEST_FILE_NAME> [OFFSET] [LIMIT]')
            print('  OFFSET by default is 0')
            print(
                '  No LIMIT by default. You can use counting from end of patch file content to limit them. \n'
                '    For example LIMIT=5 will truncate 5 bytes of patch content\n'
                '    LIMIT=-5 cut last 5 bytes of patch content before patching.'
            )

    Сохраните в файл, например patch.py
    Под линуксом нужно сделать chmod +x patch.py.
    А под виндой можно запускать так:
    python patch.py patch_file_name dest_file_name 33 -2

    Заменит в dest_file_name все с 33 символа на содержимое patch_file_name за исключением двух последних символов патча. Последний и предпоследний параметры можно опустить.

    Или использовать утилиту dd. Она стандартная и портирована под винду.
    Ответ написан
  • Нормально ли учить Django более полугода?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    До относитеьно комфортной работы на фрилансе вам надо хотя бы для себя сделать не один такой проект. Можно еще разбирать по косточкам готовые в опенсорсе, чтобы понимать как делаются те или иные вещи. Если встретили что-то непонятное -- нунлите.
    Все реальные задачи куда интереснее и сложнее, чем то, что рассматривается в книжных примерах.
    Ответ написан
    Комментировать