Задать вопрос
Ответы пользователя по тегу Python
  • Как правильно реализовать алгоритм Дейкстры в Python с применением ООП?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Графы и графовые алгоритмы являются хорошим краш-тестом для memory. Очень сложно придумать оптимальную структуру для графа чтоб было и экономно и быстро искать исходящие и входящие ребра в вершину.

    Есть компактные структуры из примитивов такие как матрицы смежности например. Но они могут быть плохие
    в другом. Например в поиске в глубину. Насколько Алгоритм Дейкстры пригож для этих структур - никто не знает.

    Я-бы предложил брать большой граф на несколько тысяч вершин и гонять его в разных структурах добиваясь
    хорошего соотношения скорости к размеру потребляемой памяти.
    Ответ написан
    2 комментария
  • Надо ли что-то еще делать для избежания SQL инъекций?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нет. Ничего больше не нужно делать. Вообще не нужно делать никаких действий которые нельзя доказать или как-то протестировать. Иначе программирование превращается в черную магию и колдунство.
    Ответ написан
    Комментировать
  • Как агрегировать данные по элементам вложенного массива?

    mayton2019
    @mayton2019
    Bigdata Engineer
    выгружаются данные в виде json(csv):

    Я вижу 2 стратегии как с этим работать.

    1) Как с чистым JSON документом. Можно работать языком запросов JsonPath. И выбирать и трансформировать узлы Json многократно до полного формирования результата.

    2) Как с дата-фреймом технологии Pandas, Databricks/Spark. Судя по внешнему виду это Пандас
    загрузит успешно. Насчет Датабрикс я не уверент. Тот точно работает с Json-Lines а не с таким деревом где
    есть единый корень. У дата-фрейма есть свойства SQL-курсора. Тоесть по нему можно бегать и выбирать
    данные. Или другой датафрейм. И датафрейм обычно имеет больший запас прочности по объему данных.

    Какую стратегию выбрать - это больше вопрос к автору. Вот что он лучше знает - то пускай и выбирает.
    Ответ написан
    Комментировать
  • Как узнать об изменении в сторонней БД?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В классический реляционных БД - никак. БД проектировались исключительно как сервер который "отвечает на вопросы". И при этом сам ничего не уведомляет.

    Если нужно ловить события в той точке где они возникают - то лучшее место не БД а именно сервер приложений. И для хранения событий использовать топики Kafka или RabbitMQ.

    Если этого всего нет - то тогда дергай запросы 1 раз в час. Другого выхода нет.
    Ответ написан
    Комментировать
  • Почему скрипт не понимает, что данные в MySql изменились?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Первым делом надо доказать отсутсвие глупых ошибок. Типа вместо продуктовой БД пошел в тестовую.

    Сделай этот-же запрос из mysql консоли

    mysql> SELECT flag FROM designbase WHERE id = 501285409


    И попробуй для 2 исходника включить автокоммит как тут пишут https://mariadb.com/kb/en/mysql_autocommit/
    Ответ написан
  • Как сократить строку?

    mayton2019
    @mayton2019
    Bigdata Engineer
    По количеству информации на квадратный метр - эта строка вполне себе плотная и насыщенная действиями.

    Чтоб делать какой-то интересный рефакторинг - надо делать не одно-строчники а функции.

    Тоесть
    def composePath(....) -> string:
      return ....

    Вот. Функции можно покрывать тестами и таким образом гарантировать стабильность от изменений.
    Ответ написан
    Комментировать
  • Стоит ли мне знать как работает cmd для Python?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Командная строка нужна когда у тебя есть задачи интеграции твоего кода с чем-то другим.
    Также полезно знать ее для задач админства и девопс-освства.

    Обычно знания работы с шеллом - (не только cmd но и bash) это большой плюс к другим
    скилам и к более широкому пониманию того как работает операционная система. Файлы.
    Named Pipes. Коды ошибок и состояний. Логгирование. Анализ крашей.
    Ответ написан
    1 комментарий
  • Как решить проблему 'utf-8' codec can't decode byte 0xf6 in position 3539: invalid start byte?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Возможно ты не так интерпретируешь смысл ошибки
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf6 in position 3539: invalid start byte

    Что это за позиция 3539? Внутри строки? Файла? Или блока utf-декодера?

    Поищи просто 0xf6 внутри файла и посмотри какие байты были до него и после.
    Префикс в четыре единичных бита предполагает следующий паттерн
    11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    и надо это проверить.
    Ответ написан
    2 комментария
  • В функции four_squares программа зацикливается, и почему не проходит тест с этим числом 106369249365575352836589875696130383747?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Андрей Прохоренко, попробуй использовать библиотеку Numpy.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Обычно при работе с распознаванием картинок не используют точное равенство пикселов. Картинка может
    быть отрегулирована по яркость/контраст/гамма. И это сбивает такие компараторы.

    А цвета сравнивают по цветовой дистанции. Тоесть насколько далеко один цвет отстоит от другого в цветовом кубе
    например. Функция какого-то такого вида

    def colorDistance(r1,g1,b1, r2,g2,b2) -> int :
       return .....


    Для сравнения картинки с картинкой можно использовать аналогичный прицнип. Скалярное произведение
    всех пикселов. Вот. И сравнить с известными образцами. В теории это можно назвать однослойным нейроном
    (или 0-слойным) в зависимости от определений.
    Ответ написан
    1 комментарий
  • Как записать ошибки с консоли в txt файл?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Как-то так
    $ python3 app.py 2>err.log >out.log
    Ответ написан
    Комментировать
  • Как отсортировать многоуровневый словарь с помощью sorted()?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Обычно сортируют массивы. Это важный смысловой момент. У массивов есть порядок. А в данном документе - одни мапы. Мапы обычно не сортируют потому-что для них сортировка лишена смысла. У них - доступ по ключу а не по порядковому номеру элемента.

    Ты это понимаешь?
    Ответ написан
  • Как посчитать количество одинаковых цифр в 4-х значном числе?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можно попробовать решить обратную зачачу. Генерировать все с 3 одинаковыми.

    Например.
    111x = генератор для последовательности 1111,1112,1113....1119
    11x1 = для 1111, 1121,1131....


    А потом - отфильтровать те которые не заходят в заявленный диапазон.
    Ответ написан
    Комментировать
  • Как просто сделать неблокируемое взаимодействие с питоновским процессом?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Существует много техник взаимодействия между процессами. Основное ключевое слово для поиска - IPC (Inter process communications). Там дальше надо выйти за границы Питона потому что эти техники немного разные для Windows/Linux. Некоторые похожие (Network Sockets).

    Если надо просто вести учет строк в PIPE между процессами то можно так

    bzip2 -d -k -c very_long_file.txt.bz2 | pv -l > /dev/null
    Ответ написан
    Комментировать
  • Как разделить файл на две части по символам?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Это не будет работать. Base64 использует специальные символы padding в конце файла чтоб указать
    какой из символов терминирует поток байтов.

    Поэтому если ты просто текст base64 тупо разрежешь на 2 части то эти две части станут невалидные
    с точки зрения кодировки base64. Надо примерно так

    input string => base64decoder => bytearray => split_3500 => encode_each_array_base64 => save_to_files


    вот на таком выдуманном всевдо-коде.
    Ответ написан
  • Как конвертировать байты(шестнадцатеричный код) в string в Python?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В простейшем случае ты можешь сделать такую табличку

    b'\x01' => '01'
    b'\xff' => 'ff'

    Где одному байту будет соотвествовать 2 символа.

    Или можно разбирать 1 байт на 2 части по 4 бита и для каждого из них ставить в соотвествие одну
    шестнадцатеричную цифру.

    Ну и API-ев богатое множество должно быть.

    По поводу твоих экспериментов с utf-8. Там есть запрещенные комбинации байтов. Потому
    не любой рандомный массив байтов обязан преобразовываться в символы.
    Ответ написан
  • Как быстро получить случайное слово из файла на 12 ГиБ?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Какая максимальная длина слова? Ну допустим 20 символов.

    Не в курсе насчет питона. Но я-бы убрал фактор плавающей длины. Например я-бы разбил
    этот 12Гб файл на 20 файлов. Допустим в первом будут лежать все слова длиной в 1 символ.
    Во втором 2 символа. И так далее.

    Тогда формула будет такая. Считаем распределение слов по этим 20 файлам. Там гистограмма получается.
    Типа допустим 5% на 8 символьные слова. 8% на 9 символьные и так далее. Выбираем случайный файл
    ну как-бы учитывая "перекос". И потом уже внутри этого файла просто ищем случайное слово. Будет
    быстро потому-что слова уже имеют фиксированную длину.
    Ответ написан
    5 комментариев
  • Что быстрее и меньше занимает памяти: dict или Redis?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В обсуждении архитектуры приложения с Redis никто не считает питонские структуры данных.

    Главные фичи Redis - это управление временем жизни записей. Работа c key/value, с множествами, очередями и т.п. И обеспечение персистентного хранилища. Тоесть редис переживает физическую перезагрузку. И сохраняет данные. Он также поддерживает кластерные режимы и имеет сетевой API. Тоесть несколько разных языков и технологий могут работать с одним кластером.

    Тоесть писать через запятую Redis и Dict Python нельзя. Никто-же не сравнивает двигатель от машины и саму машину!
    Ответ написан
    Комментировать
  • Использование sql lite 3 и telebot одновременно несколькими людьми, будет ли ошибка?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Да все будет в порядке. Проскочит как сквозняк. Главное длительных транзакций не делать.
    И архитектура у SQLite - такая. Один процесс который держит открытым файлы sqlite.

    Вообще так вопросы спрашивать нельзя. Потому-что тут ответы и да и нет и оба верные.
    И автор должен быть в теме как работает мультипоточка в Питоне. Иначе получается
    как в анекдоте про "активного читателя" который пишет письма в "Академию Наук про
    подземный стук".
    Ответ написан
    Комментировать
  • Как перемешать между собой слова создав новые?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Почти во всех языках разработки есть функция shuffle которая случайным образом тасует массив как колоду карт.
    Вот как тут пишут https://www.geeksforgeeks.org/shuffle-an-array-in-... с помощью numpy.

    Есть еще генераторы перестановок (permutations) там можно получить не случайные а последовательные и неповторяющиеся перестановки. Например для массива из 10 слов можно получить больше 3 млн новых массивов.
    Ответ написан