Задать вопрос
  • Почему удаляются не все объеты класса Int?

    Vindicar
    @Vindicar
    RTFM!
    ['a', 1, 2, 'c']
    После того как ты удалил 1, 2 встанет на его место. Но этот элемент уже был обработан, и цикл пойдёт дальше, к 'c'.
    Если тебе нужно удалять элементы из списка в процессе итерации, итерируйся начиная с конца. Тогда будет меняться только позиция уже обработанных элементов.
    И делай итерацию не напрямую по списку, а по индексу.
    Ответ написан
  • Как запустить фоновую задачу?

    Vindicar
    @Vindicar
    RTFM!
    Когда ты делаешь await, ты говоришь "останови работу данной корутины, дождись, пока не закончится операция после await, потом продолжи работу". Пока одна корутина остановлена, другие могут выполняться. В общем, почитай про то, как работает асинхронная программа.
    Если тебе нужно запустить корутину, не дожидаясь её завершения, asyncio.create_task() в помощь.

    Стоит понимать, что код, который ты запускаешь через asyncio.create_task(), должен тоже быть асинхронный! Если ты завернёшь обычный синхронный вызов в корутину, и запустишь её через create_task(), чуда не будет - бот всё равно встанет колом, пока вызов не закончится.
    Так что взгляни лучше на свой парсер - если он основан на синхронной библиотеке типа requests, перепиши его на aiohttp.
    Ответ написан
  • Как получить список онлайна на сервере?

    Vindicar
    @Vindicar
    RTFM!
    Документацию читал?
    Guild.members содержит полный список пользователей сервера, просто пройдись по нему и выбери тех, у кого Member.status будет такой, какой нужно тебе.
    Ответ написан
    3 комментария
  • Телеграм бот + веб сервер, что использовать?

    Vindicar
    @Vindicar
    RTFM!
    И боту и Flask нужен вечный цикл для работы. Так что либо разноси их по разным потокам, либо разноси их по разным процессам (т.е. по разным скриптам).
    Ответ написан
  • Как получить список всех пользователей на сервере Discord?

    Vindicar
    @Vindicar
    RTFM!
    Клиент - это твой бот. Если почитать немножко поглубже, найдешь описание класса Bot
    Represents a discord bot.

    This class is a subclass of discord.Client and as a result anything that you can do with a discord.Client you can do with this bot.

    Очень частая ошибка - пытаться работать одновременно с экземпляром Client и экземпляром Bot. Это просто не нужно.
    Ответ написан
  • Как скачать видео?

    Vindicar
    @Vindicar
    RTFM!
    Устанавливаешь youtube-dl, и запускаешь его как-то так:
    youtube-dl -v -r 1M -f best -c -i -w -o "%(title)s.%(ext)s" --download-archive archive.txt URL_канала_или_плейлиста

    -v - выводить подробную информацию о прогрессе
    -r 1M - ограничение скорости в 1 мегабайт/сек, чтобы не выжрало весь канал.
    -f best - выбирать лучшее качество видео
    -c - при ошибке скачивания не начинать видео сначала, а докачивать
    -i - не останавливаться, если видео скачать не удалось, идти дальше по плейлисту
    -w - не перезаписывать файлы, если они существуют
    -o "%(title)s.%(ext)s" - формат имени файла
    --download-archive archive.txt - вести список скачанных видео, чтобы при перезапуске продолжить с того места, где остановился.

    Есть еще опции --username и --password, но я ими не пользовался, ничего сказать не могу.
    Ответ написан
    Комментировать
  • Python. Как отсортировать двухмерный список?

    Vindicar
    @Vindicar
    RTFM!
    Если j == __COLS - 1, но i < __ROWS - 1, то ты попытаешься обратиться к элементу a[i][__COLS - 1 + 1], т.е. a[i][__COLS]. Я полагаю, в этом и дело.
    Не знаю насчёт Java, но в C++ вполне возможно, что у тебя строки матрицы лежат в памяти подряд, так что ты фактически нечаянно обращаешься к a[i+1][0], тем самым корректно "склеивая" строки.
    Ответ написан
  • Как передавать значение в ssh в ответ bat?

    Vindicar
    @Vindicar
    RTFM!
    Если ввод данных в программу производится со стандартного ввода, то должно быть возможно использовать перенаправление ввода/вывода вроде my_bat.bat < input.txt где в input.txt будут вводимые значения, по порядку, каждое на отдельной строке. Если же стандартный ввод не используется, это не сработает.
    Ответ написан
    1 комментарий
  • Можно ли создавать экземпляры класса внутри самого класса?

    Vindicar
    @Vindicar
    RTFM!
    Это вопрос сцепления классов.
    Если ты внесешь это в метод класса, то теперь класс должен знать о коллекции humans, и, что ещё хуже, об информации в объекте settings. Нужно ли ему это знание для выполнения своих основных обязанностей? Если нет, делать эту операцию методом класса не имеет особого смысла.
    И я бы сказал, это слишком тривиально, чтобы вытаскивать в метод.
    Ответ написан
  • Ошибка PermissionError: [Errno 13] Permission denied при попытке редактирования файла .xlsx во время его использования. Как решить?

    Vindicar
    @Vindicar
    RTFM!
    Святослав Смирнов, никак, Эксель требует эксклюзивного доступа к файлу.
    Если нельзя закрыть его на время обновления файла, твой единственный вариант - достучаться до экселя через COM-автоматизацию, натйи окно, где открыт этот файл и заставить его изменить значения в ячейках. Это гемморой, прямо скажем.
    Ответ написан
    Комментировать
  • Сортировка файлов по части имени + формат на Python?

    Vindicar
    @Vindicar
    RTFM!
    Можно сделать обобщённое решение. Описываешь функцию преобразования, которая имя файла превращает в относительный путь к файлу.
    from os import path
    
    def get_folder(fname: str) -> str:
        ... # тут будет код
    
    base_folder = r'C:\тут\корневой\каталог\куда\складывать\файлы'
    for file in files: #перебираешь список файлов, у тебя этот код уже есть
        subpath = get_folder(path.basename(file))
        if subpath is None: # если функция вернула None, игнорируем файл
            continue
        source_path = path.abspath(file)
        target_path = path.join(base_folder, subpath)
        # и переносишь/копируешь файл из source_path в target_path


    Хорошо, а как реализовать get_folder()?
    Описываешь имя файла регуляркой, например, такого вида:\w+?(?P<Num>\d+)\.(?P<Ext>\w+)
    Как видим, эта регулярка содержит две именованных захватываемых группы - цифры перед точкой Num, и расширение Ext.
    Если тебе хватит точного совпадения, и не требуется делать что-то вида "файлы с цифрами 000-100 в папку 100", то реализация будет примерно такая:
    import re
    NAME = re.compile(r'\w+?(?P<Num>\d+)\.(?P<Ext>\w+)', re.I)
    TYPES = { #сортировка по типам
        'aac': 'AUDIO',
        'mp4': 'VIDEO',
        'jpg': 'IMAGES',
        None: 'MISC', #всё остальное
    }
    
    def get_folder(fname: str) -> str:
        m = NAME.match(fname) #пусть имя файла anything100.jpg
        if m is None: #имя файла не по шаблону - непонятно что делать с файлом
            return None # или говорим "не трогай файл"
            #return f'{TYPES[None]}/{fname}' # или кидаем в папку для неразобранного
        data = m.groupdict() # data = { 'Num': '100', 'Ext': 'jpg' }
        data['File'] = fname # data = { 'Num': '100', 'Ext': 'jpg', 'File': 'anything100.jpg' }
        data['Type'] = TYPES.get(data['Ext'].lower(), TYPES[None]) # data = { 'Num': '100', 'Ext': 'jpg', 'File': 'anything100.jpg' , 'Type': 'IMAGES' }
        return '{Type}/{Type}{Num}/{File}'.format(**data) # IMAGES/IMAGES100/anything100.jpg

    Дальше подгонишь как тебе надо, меняя реализацию get_folder().
    Ответ написан
    Комментировать
  • Python телеграм бот база данных sql?

    Vindicar
    @Vindicar
    RTFM!
    Боюсь, совет тут будет "поучиться программированию и работе с базами данных в целом". Вот кроме шуток.
    1. Зачем проходиться по базе циклом, если можно написать простейшей SELECT с фильтрацией блоком WHERE?
    2. Зачем объявлять бота и обработчик событий внутри этого цикла? У вас выживет только последняя копия для последней строки.

    Короче, итоговый код должен иметь приблизительно такой вид:
    @bot.message_handler()  
    def start(message):
        cursor = connection.cursor()
        row = cursor.execute('SELECT фамилия FROM OPCFIO WHERE имя = %s LIMIT 1', (message.text,) ).fetchone()
        if row is None:
            # не нашли фамилию, реакцию на это пропиши сам
        else:
            last_name = row[0] # нашли, она лежит в last_name, делаем с ней что нужно

    И НИКАКОГО ЦИКЛА ПО ВСЕЙ БД.
    Ответ написан
    2 комментария
  • Как наиболее эффективно прочитать и работать с большим csv в Python?

    Vindicar
    @Vindicar
    RTFM!
    Не очень ясно, какие столбцы идентифицируют объект недвижимости в файле. GUID, похоже, относится к факту купли-продажи. Так что поясни, на что смотреть.

    Я бы прочитал файл построчно, выбирая Postcode и подсчитывая количество тех или иных значений. Будет объёмно, но уж точно не 20 гигов. Затем посмотрел бы на гистограмму - много ли уникальных Postcode (т.е. тех, которые встречают один раз). Если много, то тогда достаточно посмотреть только на те Postcode, которые встречаются неоднократно. Это позволит уменьшить размер файла. В дальнейшем его можно фильтровать дальше по той же схеме, но с другими полями.
    Ответ написан
  • Почему python не видит модуль?

    Vindicar
    @Vindicar
    RTFM!
    Проекты в PyCharm могут использовать системный интерпретатор, или виртуальное окружение (отдельную копию интерпретатора для проекта). Соответственно модули, установленные в одном, другой не увидит.
    Проверь, что используешь, и куда ставишь.
    Ну и да, имена устанавливаемых пакетов и импортируемых модулей в студию. Может, у тебя просто опечатка в импорте.
    Ответ написан
    3 комментария
  • Как собрать 32-битный exe файл?

    Vindicar
    @Vindicar
    RTFM!
    Поплярные упаковщики питона в exe просто засовывают туда весь интерпретатор питона (ну может выбирает только используемые модули) вместе с кодом скрипта. Это НЕ настоящая компиляция.
    Так что делай вывод сам, можно ли упаковать скрипт в 32-битный экзешник, не имея 32хбитного питона на машине.
    Если есть полноценный транслятор Питона в C++ или подобный честный комплируемый язык, он мне не известен.
    Ответ написан
    Комментировать
  • Как определять движение в движущейся камере python?

    Vindicar
    @Vindicar
    RTFM!
    В общем и целом решения нет, так как отличить движение объекта от эффекта параллакса затруднительно, да и опираться на координаты тоже будет проблематично.
    Ты можешь поэкспериментировать с оптическим потоком, чтобы попытаться понять, в каком направлении сместилась камера, и пытаться либо произвести контр-смещение кадра перед использованием mean of gaussians, либо отсеивать объекты, у которых величина собственного смещения слишком близка к найденному движению камеры (со знаком минус). Первое реально работает только при съёмке с рук стоящего человека, т.е. когда смещения сравнительно малы. Если нужно ловить движение, когда камера тоже движется в одном направлении, шансов очень мало.
    Так или иначе, тебе наверняка придётся самому реализовывать тот или иной алгоритм background subtraction, чтобы иметь возможность вмешаться в его работу для компенсации движения.
    Ответ написан
    1 комментарий
  • Как лучше запускать программу на сервере: crontab или systemd?

    Vindicar
    @Vindicar
    RTFM!
    Встречные вопросы:
    1. Велика ли инициализация при запуске? Если нужно выполнять много стартовых операций, причём дорогих, то может иметь смысл запустить и спать.
    2. Срабатывание строго по времени или может требоваться мониторить другие события? Если абсолютно точно первое, то можно крон. Если возможно второе (и речь не о "пользователь сам вызвал программу"), то лучше демон.
    3. Есть ли зависимости, т.е. другое ПО которое должно быть запущено к моменту срабатывания? Если да, systemd может их разрулить, ЕМНИП.
    Ответ написан
    Комментировать
  • Как печатать текст перед input() в Python?

    Vindicar
    @Vindicar
    RTFM!
    Либо очищать терминал и перевыводить содержимое, либо использовать ncurses (но это только под линукс, под винду нужно искать тот или иной порт).
    Ответ написан
    Комментировать
  • Как сделать поиск картинок в боте?

    Vindicar
    @Vindicar
    RTFM!
    [сарказм]Всего-то делов, нужно иметь базу картинок со всего интернета.[/сарказм]
    А если серьёзно, ты можешь попробовать потыркать поиск гугла/яндекса, но они подобное очень не любят, и посылают ботов куда подальше.
    Ответ написан
    2 комментария
  • Как полученную переменную конвертировать в числовую?

    Vindicar
    @Vindicar
    RTFM!
    Приведённый код должен работать, по идее. Приведи пример входных данных, вызывающих ошибку, и полный текст этой ошибки.

    Исходя из преобразования во float, могу разве что предположить что ты вводишь число с десятичной запятой ("2,3") а не с десятичной точкой ("2.3").
    Ответ написан
    9 комментариев