• Как изменить определённую строку и записать новое значение в txt?

    Vindicar
    @Vindicar
    RTFM!
    Мой совет - не использовать простые текстовые файлы для этой цели.
    Текстовый файл - это последовательность символов, а не строк. Если длина новой строки отличается от длины старой - тебе придётся сдвигать всё содержимое, идущее после этой строки.
    Либо используй бинарный формат, либо подключи библиотеку для хранения структурированных данных (типа json или чего-то попроще).

    Если прямо очень надо именно текстовый файл, посмотри, нельзя ли просто перезаписать файл целиком.
    Ответ написан
  • Оптимально ли использовать ветку if elif else в callbacl query handler?

    Vindicar
    @Vindicar
    RTFM!
    1. Можно указывать фильтр на call.data при регистрации callback
    2. Если есть повторяющиеся действия - посмотри, нельзя ли использовать коллекцию (например, словарь, в котором лежат обработчики отдельных вариантов).
    Ответ написан
    Комментировать
  • Как решить проблему с выделением памяти в субпроцессе?

    Vindicar
    @Vindicar
    RTFM!
    Либо файл большой, либо памяти мало. Нужно проверить потребление оперативки (как - зависит от ОС).
    А дальше...
    Либо смотреть, нельзя ли конвертировать постранично, например.
    Либо пытаться уменьшить потребление ОЗУ в других местах (в основном скрипте?)
    Либо раскошелиться на больший объём памяти.
    Ответ написан
    Комментировать
  • Почему может выдавать ошибку в Python Bot?

    Vindicar
    @Vindicar
    RTFM!
    await message.delete
    Наверно, всё-таки await message.delete()?
    Ответ написан
    Комментировать
  • Python Как сделать, чтобы для определенного аудио выполнялось свое условие?

    Vindicar
    @Vindicar
    RTFM!
    Переделай песни в словарь вида
    options = {
      "Неизвестная песня.mp3": "123",
      "Неизвестная песня 2.mp3": "456",
      "Неизвестная песня 3.mp3": None,  # у этой песни нет сообщения
    }
    
    # ну а когда нужно определить песню
    track_name = random.choice(list(options.keys()))
    # audio_data = open(track_name, 'rb')  # зачем это, кстати? Ты отдаёшь имя файла всё равно
    option = options.get(track_name) # получаем сообщение для песни
    bot.send_audio(message.chat.id, track_name):
    if option is not None:
        pass  # делаешь что тебе надо с option
    Ответ написан
    Комментировать
  • Возможно-ли добавить в бота телеграмм (pyTelegramBotAPI), подставление картинки поверх основной картинки?

    Vindicar
    @Vindicar
    RTFM!
    Возможно.
    За готовым кодом - на фриланс. Сюда - с конкретными вопросами по реализации.
    Ответ написан
  • Как проверить, есть ли в строке язык, кроме английского?

    Vindicar
    @Vindicar
    RTFM!
    Поищи описание диапазонов юникода, может, получится по кодам символов работать. Но да, при такой формулировке задачи - только whitelist.
    Ответ написан
    Комментировать
  • Как правильно работать с datetime.date()?

    Vindicar
    @Vindicar
    RTFM!
    Перепроверь с чем ты пытаешься работать - с классом datetime.datetime и его полем date, или же с модулем datetime и его классом date.
    Судя по ошибке - ты работаешь c первым, а думаешь что со вторым.
    Перепроверь импорт модуля. Ты его не показал, но я готов спорить что там from datetime import datetime.
    Ответ написан
    3 комментария
  • Программа останавливается на определенном этапе после ее запуска, в чем ошибка?

    Vindicar
    @Vindicar
    RTFM!
    Что значит "закрывается и дальше не работает"?
    У тебя после вывода последнего сообщения в цепочке программа ничего не делает и просто завершается. Если ты запускаешь exeшник вне терминала, то он создаёт своё окно консоли - которое, разумеется, закроется по завершении программы.
    Если тебе нужно, чтобы окно не закрывалось - сделай так, чтобы программа не завершалась по выходу из чудо-if. Добавь хотя бы input('Нажмите Enter чтобы закончить игру') в конце.
    Ответ написан
    Комментировать
  • Как обновить переменную в цикле?

    Vindicar
    @Vindicar
    RTFM!
    У тебя и test и out ссылаются на один и тот же объект-список, поэтому когда ты его модифицируешь, у тебя не остаётся копии, чтобы начать всё с начала.
    Убери параметр из подпрограммы, и делай test = out.copy() в начале и при "перезапуске".
    Ответ написан
    1 комментарий
  • Как сделать паузу?

    Vindicar
    @Vindicar
    RTFM!
    file.flush() после записи?
    Ответ написан
  • Как обслуживать юзеров по очереди телебот?

    Vindicar
    @Vindicar
    RTFM!
    global user_id
    Ну как бы вот виновник. Глобальные переменные. Они общие на всего бота и на всех пользователей. Если тебе нужно дифференцировать пользователей - делай это сам.
    Делай хранилище "ключ-значение", где ключ - ID пользователя, значение - хранимые для этого пользователя данные. При обработке сообщения читай ID пользователя, доставай из хранилища данные, и уже сообразно им обрабатывай сообщение.
    Таким хранилищем может быть простой словарь (если не нужно сохранять состояние между перезапусками бота), БД или ещё что.

    Не знаю, есть ли в telebot реализация Finite State Machine, но обычно для реализации сценариев используют её. Идея та же - для каждого юзера храним его текущее состояние (шаг в сценарии) и ассоциированные с ним данные.
    Ответ написан
    2 комментария
  • Почему индекс нулей в списке равен нулю?

    Vindicar
    @Vindicar
    RTFM!
    У тебя в строках массива несколько нулей. Метод index() по умолчанию находит только первое искомое значение. Если бы ты почитал документацию, ты бы это понял, и увидел, как это обойти.

    list.index(x[, start[, end]])

    Return zero-based index in the list of the first item whose value is equal to x. Raises a ValueError if there is no such item.

    The optional arguments start and end are interpreted as in the slice notation and are used to limit the search to a particular subsequence of the list. The returned index is computed relative to the beginning of the full sequence rather than the start argument.


    Вообще, раз уж ты ручками перебираешь строки и ячейки матрицы, используй enumerate().
    for i_row, row in enumerate(grid):  # row == grid[i_row]
        for i_col, value in enumerate(row):  # value == row[i_col]
            # далее сам
    Ответ написан
    1 комментарий
  • Как реализовать запись следующего сообщения?

    Vindicar
    @Vindicar
    RTFM!
    На гитхабе вариант с несколькими стейтсами, а мне нужен один.

    В приведённом примере явно два состояния - ожидание фразы "ввести имя" и ожидание собственно имени. Одним тут не обойдёшься. Или изменяй сценарий (нафиг вообще вводить фразу "ввести имя"?) или используй два состояния.
    Ответ написан
    Комментировать
  • Как убрать выведение сообщения err1?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, нужно не if ... if ... if ... print(), а if ... elif ... elif ... else: print()

    Во-вторых,
    if c != "множення" and "додавання" and "віднімання" and "ділення" :

    Очень многие совершают эту ошибку. Так НЕ работает.
    Код вида if x != 2 or 3: эквивалентен if (x != 2) or (3 != 0):, что, в свою очередь даёт if (x != 2) or True:. А что угодно or True даст True, т.е. условие будет всегда выполняться.
    Правильно - if x != 2 and x != 3: или if x not in (2, 3):
    Для своей задачи приспособишь по аналогии.
    Ответ написан
    Комментировать
  • Что это, и как это обойти чтобы не ждать день?

    Vindicar
    @Vindicar
    RTFM!
    Вот тебе реально лениво вставить этот текст в автопереводчик? Там всё написано прямым простым языком.
    Max number of daily application command creates has been reached

    Каждый раз, когда ты запускаешь скрипт, он пытается создать команду заново. Ты исчерпал дневной лимит (200 попыток) на это дело. Впредь отлаживай осторожнее.
    Ответ написан
    6 комментариев
  • Как захватить и транслировать захват экрана в opencv python?

    Vindicar
    @Vindicar
    RTFM!
    Окей, гугл, python capture screen
    Посмотри в сторону vidgear. Репозиторий обновлялся последний раз полгода назад, так что либа вроде ещё живая.
    Пример оттуда:
    # import required libraries
    from vidgear.gears import ScreenGear
    import cv2
    
    # open video stream with default parameters
    stream = ScreenGear().start()
    while True:
        # read frames from stream
        frame = stream.read()
        # check for frame if Nonetype
        if frame is None:
            break
    
        # {do something with the frame here}
    
        # Show output window
        cv2.imshow("Output Frame", frame)
        # check for 'q' key if pressed
        key = cv2.waitKey(1) & 0xFF
        if key == ord("q"):
            break
    # close output window
    cv2.destroyAllWindows()
    # safely close video stream
    stream.stop()
    Ответ написан
    Комментировать
  • Добавление в массив новое число не добавляет число, а добавляет. Что делать?

    Vindicar
    @Vindicar
    RTFM!
    Нужно не путать просто генераторы и генераторы списков.
    a = (sum(new_matrix[i]) for k in range(matrix_1_height))

    Это - выражение-генератор. Оно принципиально "ленивое" - вычисляет свои значения только по запросу, и делает это только один раз. Т.е. ты можешь прогнать цикл for i in a, и значения будут сгенерированы и получены - но если попробуешь тут же прогнать цикл ещё раз на том же выражении, то не получишь ничего.

    b = [sum(new_matrix[i]) for k in range(matrix_1_height)]

    Это - генератор списка. Он вычисляет значения немедленно, все, и возвращает обычный список, который можно итерировать сколько угодно раз.
    По сути, выражение можно записать и так:
    a = (sum(new_matrix[i]) for k in range(matrix_1_height))
    b = list(a)  # прогоняем генератор и превращаем его в список
    Ответ написан
    Комментировать
  • Как извлечь строку из файла?

    Vindicar
    @Vindicar
    RTFM!
    Нет понятия "извлечь строку". Есть понятие "прочитать строку" и "удалить строку".
    В случае с "удалить" подразумевается, что мы
    а) либо перезаписываем файл целиком,
    б) либо перезаписываем всё, что идёт после начала удаляемой строки (т.е. копируем то, что после конца удаляемой строки) и обрезаем конец файла.

    Вообще текстовые файлы - весьма неблагодарная штука для редактирования. Лучше в таких случаях использовать либо другой формат данных, либо вообще другое хранилище.
    Ответ написан
    2 комментария
  • Почему возникает ошибка error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'?

    Vindicar
    @Vindicar
    RTFM!
    _, image = cap.read()
    Не _, а success_code, то бишь признак успешности чтения. Проверь, читается ли у тебя вообще кадр с камеры.
    Ответ написан
    Комментировать