Задать вопрос
  • Как автоматически создавать большие отчёты из множества docx файлов?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В общем задача типичная, у компании за год из разных отделов прилетает по 100+ отчётов с разным содержанием, в конце года необходимо создать один большой отчёт о всей проделанной работе на 300+ страниц, делали это вручную, но сейчас решили автоматизировать процесс, возник вопрос - как это реализовать?

    Для нейронных сетей не свойственен "детерминизм". Тоесть дважды поставленная одна
    и та-же задача для НС будет иметь 2 разных результата. Это свойство НС очень важно
    например если вы их путаете с Lisp/Prolog и прочими экспертными системами которые
    внутри себя действительно содержали if-else логику а НС так не работает.
    Она - "шумит".
    Она завист от random генератора и этот генератор является ее базовым свойством.
    Его принципиально нельзя отключить даже при 0 температуре алгоритмов НС.

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

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Поскольку быстрым поиском готовый ответ на Тостере не находится, стоит написать канонический.

    Сначала общая информация:

    Транзакция служит для обеспечения принципа "всё или ничего", гарантируя, что либо все запросы выполнились без ошибок, либо, если в каком-то из запросов произошла ошибка, то все предыдущие будут отменены, как будто их и не было вовсе. Из чего можно сделать следующие выводы:
    • транзакция не нужна для любого количества запросов на выборку данных, поскольку там нечего откатывать
    • транзакция не нужна для одного запроса на изменение данных (вставка, обновление, удаление) - такой запрос представляет из себя мини-транзакцию, которая сама автоматом откатывается при ошибке
    • не следует путать транзакции с блокировками. Хотя при определённых параметрах транзакции могут выполнять и блокировку, в общем случае это два разных механизма, которые могут выполняться как вместе, так и по отдельности. По умолчанию транзакция НЕ обеспечивает блокировку таблиц, участвующих в запросе


    Самым простым вариантом будет заключить запросы между вызовами beginTransaction() и commit(), как показано например в документации к последнему.
    $db->beginTransaction();
    $db->prepare("UPDATE `tab1` SET `col` = ?")->execute($data1);
    $db->prepare("UPDATE `tab2` SET  `col` = ?")->execute($data2);
    $db->prepare("UPDATE `tab3` SET  `col` = ?")->execute($data3);
    $db->commit();

    Для современных версий РНР этого должно быть достаточно: начиная с РНР 8.0 ошибочный запрос по умолчанию выбрасывает исключение. Не пойманное исключение прерывает выполнение РНР скрипта. При прерывании выполнения скрипта РНР закрывает соединение с Mysql, а при закрытии соединения Mysql откатывает все открытые в нём транзакции.

    Соответственно, при ошибке в любом из запросов транзакция автоматически откатится. А при успешном выполнении всех запросов транзакция, соответственно, закоммитится.

    В редких случаях, когда после отката транзакции предполагается дальнейшее выполнение кода, можно заключить код транзакции в try-catch и откатить её вручную.

    Важно помнить некоторые особенности.
    • в mysql не все движки таблиц поддерживают транзакции. впрочем ,учитывая что innodb является движком по умолчанию уже лет 20, это вряд ли будет проблемой
    • запросы на изменение страктуры таблиц автоматически коммитят стартовавшую транзакцию, то есть их следует избегать. Кажется, в новых версиях какие-то уже не коммитят, но я предпочитаю избегать всё равно.


    Также желательно помнить, что в любом более-менее сложном коде очень быстро появляются вложенные транзакции, а PDO при попытке стартовать транзакцию при уже открытой, выбросит исключение, что, соответственно, приведёт к откату родительской (и это гораздо лучше поведения MySQL по умолчанию, которая автоматически коммитит старую). И имеет смысл накидать простой кодик, который считает вложенные транзакции, и не стартует, если уже был старт, а при коммите вычитает вложенность, а реально коммитит только если вложенности не осталось. Что-то вроде кода из комментариев к beginTransaction(), подравняв его напильником
    class \MyPDO extends \PDO
    {
        protected $transactionCounter = 0;
    
        public function beginTransaction()
        {
            if($this->transactionCounter++ === 0) {
                return parent::beginTransaction();
            }
        }
        public function commit()
        {
            $this->transactionCounter--;
            if($this->transactionCounter === 0) {
                return parent::commit();
            }
        }
        public function rollback()
        {
            $this->transactionCounter = 0;
            return parent::rollback();
        }
    }

    разместив его либо прямо в PDO, либо в своем враппере.
    Ответ написан
    3 комментария
  • Как цикл for влияет на формирования списка?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Дело не в цикле for. Функция pair возвращает генератор, а генератор можно обойти только один раз.
    Ответ написан
    Комментировать
  • В чем ошибка при парсинге на python?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Что интересно он например сейчас отпарсил один заголовок одного объявления, а иногда может больше, а иногда сразу выдает ошибку.

    В таких случаях в обработчике ошибок надо логировать контент, который отдал сайт. Очень вероятно, что там нет тега h1, а есть только текст "Обнаружен парсинг, доступ заблокирован" или что-то подобное.
    Ответ написан
    Комментировать
  • Почему def не видет переменную, которая была объявлена глобальной?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Tkinter
    Седой и строгий
    global - это инструкция не о том, где создать переменную, а где искать.
    Ответ написан
    6 комментариев
  • Как оптимизировать цикл while?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Если у вас в коде появились нумерованные переменные, вы точно что-то делаете не так.

    Кроме рекомендации Rsa97 вынести однотипные действия в функцию, можно однотипные данные вынести в структуру. Например, словарь, список или что-то такое. И в одном цикле по условию переходить к «следующему» элементу структуры.

    Можно вообще всё в класс объединить - однотипные данные и однотипные методы для работы с ними.
    Ответ написан
    Комментировать
  • Какие ошибки в понимании объектов?

    Maksim_64
    @Maksim_64
    Data Analyst
    (3).__class__- здесь объект создался, затем ты обращаешься к его атрибуту.

    3.__class__ - здесь при его создании произошла ошибка (если быть точным даже на стадии парсинга ошибка), питон пытается спарсить, как float, и у него естественно не получается.
    Ответ написан
    Комментировать
  • Как скачать несколько файлов за раз?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Мануал, опции ФС, первая же строчка: https://github.com/yt-dlp/yt-dlp?tab=readme-ov-fil...
    Ответ написан
    Комментировать
  • Как правильно написать код на Python для шифра "Цезарь"?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Заведите строку со алфавитом, по которому идёт шифрование, и тогда вам будет без разницы, какие символы и сколько использовать. Если символа нет в алфавите, то оставляете его как есть. Если символ есть в алфавите, то нахо́дите его позицию, добавляете смещение по модулю длины алфавита, находите новый символ в вычисленной позиции.
    Ответ написан
    Комментировать
  • InvalidHeader и SSLError - как исправить?

    @Everything_is_bad
    1. так ты запятую потерял, после первой пары в headersChrome
    2. за такой except надо сильно бить ногами, ты скрыл все ошибки, ты про них вообще ничего не знаешь
    Ответ написан
    1 комментарий
  • Как ускорить сканирование python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Как варианты:
    1. Обязательно ли искать оранжевый индикатор во всей области изображения, а не в одном ожидаемом месте?
    2. mss.mss() - обязательно ли каждую итерацию захватывать экран заново?
    3. Преобразование в hsv точно нужно?
    4. time.sleep(0.05) # Проверяем цвет каждые 100 мс - что то не клеится в Ваших показаниях, на основание чего указано 50мс?

    Короче, профилировщик в зубы и бегом искать узкие места самостоятельно.
    Ответ написан
    1 комментарий
  • Могу ли я активно ссылаться на видео с ютуба?

    Это норма и так все собственно и делают.
    И ровно для этого в ютубе по кнопке "поделиться" есть возможность сделать iframe для проигрывания и у самого ютуба в доке описано, как можно сделать из ссылки такой iframe.
    Правда есть нюанс:
    1. Видео должно быть доступно без регистрации
    2. Видео должно быть публичным. (не доступ по ссылке)
    3. Не должно быть возрастных ограничений (иначе будет п1)
    4. Автор видео должен при загрузке явно разрешить встраивание на другие платформы
    5. У видео не должно быть ограничений по странам
    6. Сам youtube должен быть доступен в стране, где сидит пользователь)
    Ответ написан
    1 комментарий
  • Почему остаётся след от спрайта?

    @rPman
    Типовой способ, каждый кадр все видимое поле очищается и ПОЛНОСТЬЮ перерисовывается, что бы не мигало, делают это в виртуальный буфер, который после этого копируется на экран.

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

    Ну и еще один способ, скорее всего он тебе пока подойдет, так же с осторожностью, в зависимости от взаимных пересечений спрайтов, при рисовании спрайта, сохраняй картинку под ним (т.е. без него). Соответственно, при изменениях спрайта или его координатах, ты его 'удаляешь' с поля, заменив изображение под ним на сохраненное, и рисуешь новый спрайт или в новом месте (так же сохраняя область под ним до...). Этот метод подходит для случаев, когда изменения единичные, т.е. атомарные и начинаются проблемы если спрайты накладываются друг на друга (незначительные, если 'удаляешь' спрайт под кем то, то перерисовывать все спрайты над каждым, в порядке снизу вверх).

    upd. способ, решающий 'все проблемы', но спрайты рисовать придется самому по пиксельно, не используя системные вызовы (например писать шейдер для gpu) - ты должен перерисовывать попиксельно все поле обновляемого спрайта, вычисляя пикселы о то всех пересекающихся с ним спрайтами (идешь в порядке от самого верхнего, пока не дойдешь до непрозрачного пиксела, если есть альфаканал - то продолжаешь поиск, сохранив информацию о нем), в этом случае тебе никак не придется трогать ничего на экране кроме текущего перерисовываемого спрайта. Если за обновление тебе нужно менять несколько спрайтов, то сначала считаешь карту пикселов, которые нужно обновить на экране, а уже потом для каждого пробегаешь по их пикселам
    Ответ написан
    Комментировать
  • Как выучить Python?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    в котором на протяжении всей книги рассказывается, как правильно написать " Hello World ".

    В плане книг советую попробовать "Изучаем Python" (Марк Лутц, 2 тома), но это голая информация.
    Параллельно с чтением нужно активно писать код. Для начала можно решать задачи. Олимпиадные или на сайтах по типу CodeWars.
    Когда они будут решаться легко, выбери какое-нибудь направление (веб-разработка и боты, анализ данных, нейронки, автоматизация) и повторяй цикл - читай учебный материал и пиши код. Главное, чтобы это было осмысленно - если это нейронки то, например, попробуй сделать решалку математических задач, распознающую примеры на фотке, если это веб - можно попробовать повторить уже какой-то проект или "по дружбе" сделать кому-то то, что нужно человеку.
    Ответ написан
    4 комментария
  • Можно ли на Python написать простой сайт без фреймворков?

    Aetae
    @Aetae
    Тлен
    Python в отличие от PHP - язык общего назначения. В нём ничего не заточено "из коробки и без библиотек" для работы web-сервером.
    Ты либо пишешь руками всё с нуля вплоть до реализации протокола http(а то и tcp, почему нет), либо таки подключаешь соответствующие библиотеки.
    А если ты подключишь что-то, что предназначено для этой задачи, оно скорее всего уже будет уметь заметно больше чем в примитивную работу с html как текстом.

    По сути твой запрос "дайте мне такую python библиотеку для работы с web, чтоб умела не только отдавать статику, но и умела в работу шаблонами, однако исключительно в примитивную, как с текстом, на уровне древнего чистого php". Запрос специфический и бессмысленный, но мб и существует что-то такое.
    Ответ написан
    6 комментариев
  • TypeError: __init__() takes 1 positional argument but 2 were given у меня проект на aiogram плюс sqlalhemy ,но я совсем недавно начал?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    и не говорить мне учиться
    Именно это я и скажу. Мы должны все разжевать и вам в рот положить?
    но я совсем недавно начал
    Это не даёт вам права не учиться
    прошу найти именно ошибку
    Вот именно поэтому, я и посылаю вас учиться.
    я уже задавал этот вопрос
    А это чревато его удалением или даже баном.

    Ну и как я вам уже говорил 12 дней назад
    Учиться, учиться и ещё раз учиться. А не ботов писать.
    Ответ написан
  • Как создать фоновую задачу в боте?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    aiogram==2.25.1

    Сколько раз твердили миру... Да не используйте вы 2.x! В 21 веке все уже перешли на 3.x

    Как мне такое реализовать, с учетом того, что я <...> в асинхроне ничего не понимаю?

    Так может надо что-то понять? Почитать, поразбираться, для начала?

    Вывод: готовый код никто за вас писать не будет. Изучайте сначала программирование и базовые основы, а потом рвитесь в бой. Тем более, если это ваша "хотелка" и она не к спеху
    Ответ написан
    8 комментариев
  • Как решить: ImportError: cannot import name 'executor' from 'aiogram'?

    @Everything_is_bad
    1. при чем тут node.js?
    2. ошибка без проблем гуглиться и отвечали на ее 100500 раз, ты поставил 3 версию aiogram, а код у тебя от 2й
    Ответ написан
    2 комментария
  • Почему после нескольких запросов выдает Remote end closed connection?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Для Ютуба некоторые, м-м-м, трудности - это вы, качки пачек видео. Вот он и борется, как может.
    Ответ написан
    1 комментарий