Задать вопрос
Ответы пользователя по тегу Python
  • Почему не хочет работать import mouse?

    Vindicar
    @Vindicar
    RTFM!
    Что подразумеваешь под "не хочет работать"?
    ImportError? Ну так mouse - это не стандартный модуль питона, а сторонняя библиотека, ставь её через pip, как описано по ссылке.
    Ответ написан
    Комментировать
  • Как исправить ошибку 302 после отправки запроса к API?

    Vindicar
    @Vindicar
    RTFM!
    Ну вообще-то код ответа HTTP 302 - это не ошибка, это безобидное перенаправление. То самое, которое ты запрещаешь с помощью параметра allow_redirects=False, хотя по умолчанию requests прекрасно с ними справляется самостоятельно. У тебя есть какие-то особые причины не позволять библиотеке это сделать?
    Ответ написан
  • Можно ли использовать другие програмы с помощью кода python в фоновом режиме?

    Vindicar
    @Vindicar
    RTFM!
    pyautogui такое не умеет вроде. Посмотри в сторону pywinauto.
    Ответ написан
    Комментировать
  • Не работает self.ship = Ship(screen) выдаёт ошибку не найдена имя screen. Пишу игру на python с pygame пожалуйста опишите как решить эту проблему?

    Vindicar
    @Vindicar
    RTFM!
    Потому что у тебя и в самом деле нету локальной или глобальной переменной screen.
    Ты объявляешь self.screen, а это - поле класса.
    В отличие от многих других ЯП, питон требует явного указания self при доступе к полям класса из его методов, и не позволяет обращаться к ним, как к локальным переменным.
    Так что и далее в методах Ship придётся использовать self.screen.
    Ответ написан
    Комментировать
  • Это правильная реализация бинарного поиска?

    Vindicar
    @Vindicar
    RTFM!
    Твоя реализация зациклится, если такого элемента нет в списке.
    Ответ написан
    Комментировать
  • Как создать переменную к папке на компьютере?

    Vindicar
    @Vindicar
    RTFM!
    Ну "на любом компьютере" - это сильно сказано. Всё-таки на компе может быть и не windows.
    Но у тебя есть две опции.
    Во-первых, есть переменная окружения %APPDATA%, которая хранит как раз таки путь к AppData/Roaming для текущего пользователя. См. os.environ.
    Во-вторых, есть модуль win32com, который позволяет использовать модули COM для Windows, в т.ч. предоставляемые системой. Один из них занимается путями к стандартным папкам.
    from win32com.shell import shell, shellcon
    #путь к "мои документы". можно задавать разные константы CSIDL_XXX
    doc_folder = shell.SHGetFolderPath(0, shellcon.CSIDL_PERSONAL, None, 0)
    Ответ написан
    Комментировать
  • Как запускать python екзешники без консоли?

    Vindicar
    @Vindicar
    RTFM!
    Если нужно только запустить скрипт, не делая его экзешником, то должно быть достаточно сменить скрипту расширение на .pyw.
    Если нужен именно экзешник, который не открывает консоль, то см. ответы выше.
    Ответ написан
    Комментировать
  • Как можно проверить являеться ли процесс системным?

    Vindicar
    @Vindicar
    RTFM!
    По пользователю, от имени которого они выполняются (proc.username())?
    Либо по расположению исполняемого файла (proc.exe()).
    Смотря как ты определяешь "системный процесс".
    Ответ написан
    Комментировать
  • В чем разница конструкций?

    Vindicar
    @Vindicar
    RTFM!
    async def main():
        print(f"started at {time.strftime('%X')}")
        # вызов займёт 2 секунды, а не 3
        await asyncio.gather(say_after(1, 'hello'), say_after(2, 'world')) 
        print(f"finished at {time.strftime('%X')}")


    В синхронном коде такое можно имитировать только потоками.
    Ответ написан
    Комментировать
  • Как вывести по одному разу каждый символ который есть в строке?

    Vindicar
    @Vindicar
    RTFM!
    print(set(my_str))
    Ответ написан
    Комментировать
  • Расширение таблицы при парсинге?

    Vindicar
    @Vindicar
    RTFM!
    Если куски подгружаются динамически с помощью AJAX, то у тебя два выхода.
    а) выяснить, какой запрос нужно отправить на сервер, чтобы получить кусок таблицы, и выполнять именно этот запрос
    б) гонять полноценный браузер с помощью селениума
    Ответ написан
    Комментировать
  • Выдает ошибку list indices must be integers or slices, not str на 13 строке, в чем проблема?

    Vindicar
    @Vindicar
    RTFM!
    Ты очевидно что-то напутал со структурой данных res - на каком-то из уровней в ней список, а ты ожидаешь словарь с ключами-строками. Выведи эту структуру с помощью pprint, разберись, чем она отличается от твоих ожиданий, и поправь код обращения к res.
    Ответ написан
    Комментировать
  • Как записать в файл данные в заданном порядке?

    Vindicar
    @Vindicar
    RTFM!
    for m, k, z in zip(all_post, all_comments, all_undercom):
    Зачем тебе этот цикл, если ты ниже делаешь
    for k in all_comments:
    for z in all_undercom:

    У меня такое чувство, что ты не очень понимаешь, что делает функция zip.
    Ответ написан
    1 комментарий
  • Как вызвать self класса родителя?

    Vindicar
    @Vindicar
    RTFM!
    Неправильная терминология. Example - не родитель MyThread.
    Передайте ссылку на экземпляр Example (или на нужное поле) через параметр конструктора MyThread и сохраните её как экземплярную переменную класса MyThread. Но имейте ввиду - не факт, что вы сможете обратиться к элементам управления QT непосредственно из другого потока.
    Ответ написан
  • Что делать если телеграмбот который показывает погоду вылетает после неправильного введённого города?

    Vindicar
    @Vindicar
    RTFM!
    Скорее всего при неправильном городе вызов
    observation = mgr.weather_at_place(message.text)
    сгенерирует исключение. Судя по докам, это будет либо ParseResponseException либо APICallException. Если бы ты озаботился привести полное сообщение об ошибке, можно было бы сказать точно.
    В любом случае, читай про обработку исключений. Тебе нужно завернуть вызов в блок try, и если возникла ошибка - сообщить пользователю.

    Это я понимаю. Я не сам писал бота это ролик из ютуба.

    Если понимаешь, учи основы питона по-старинке - учебник и упражнения. По ютубу научишься только повторять, не понимая смысла. Сначала - основы, потом уже бросайся писать ботов.
    Ответ написан
    Комментировать
  • Как постоянно обновлять принт?

    Vindicar
    @Vindicar
    RTFM!
    Тут все предлагают system("cls"), хотя практичнее было бы использовать символ \x08.
    Простой пример, для понимания:
    print('foobar', flush=True, end='') #немедленный вывод без перевода строки
    print('\x08'*3, flush=True, end='') #отступаем на три символа назад
    print('xyz', flush=True, end='') #на экране будет выведено fooxyz

    Но этот приём работает только если:
    1. Данные выведены строго в одну строку, и курсор остаётся на ней.
    2. Известна длина затираемой части строки.
    3. Обновлять таким образом нужно только одно значение на экране.

    В противном случае либо используешь приём с cls, либо вообще плюёшь на терминал и делаешь GUI.
    Ответ написан
    Комментировать
  • Python/numpy: как увеличить массив на одну строку без использования дополнительной памяти?

    Vindicar
    @Vindicar
    RTFM!
    Нельзя. В этом и состоит отличие массива от списка. Список легче растянуть, чем массив, так как массив хранит все свои данные одним блоком, а список хранит одним блоком только ссылки на свои элементы.
    Нужно либо выделять массив с запасом, либо сбрасывать данные на диск для последующего чтения в numpy-массив.
    Ответ написан
    1 комментарий
  • Селениум. Использую find_elements и get_atribute, а как сделать одним запросом, чтобы без ошибки not attached?

    Vindicar
    @Vindicar
    RTFM!
    Насчёт not-attached - я подозреваю, ты не дождался, пока страница полностью прогрузится.
    А вообще в XPath есть выбор значения атрибута:
    //ul[@id="im_dialogs"]/li[contains(@class, "nim-dialog_unread ")]/@data-list-id

    Либо, возможно, так
    string(//ul[@id="im_dialogs"]/li[contains(@class, "nim-dialog_unread ")]/@data-list-id)

    Здесь string() - это не Python-функция, а XPath-функция. Если селениум её поддерживает, то запрос должен вернуть именно строковое значение атрибута.
    Ответ написан
  • Почему не выдаёт каждый раз новое прокси?

    Vindicar
    @Vindicar
    RTFM!
    Какая лютая жесть. Нахрена все эти преобразования из списка в строку и обратно?
    Я предполагаю, что в файле одна строка - это один прокси, и файл не настолько чудовищно велик, чтобы избегать его полной загрузки в память. Тогда если на пальцах:
    1. Описываешь функцию, которая разбирает строку в описание прокси (например, в кортеж "адрес,порт"). Например, если прокси указаны в виде адрес:порт, то подойдёт что-то типа
    @staticmethod
    def parse_proxy_line(line):
        # сработает, если на каждой строке указан порт
        addr, _, port = line.strip().rpartition(':')
        return (addr, int(port))

    2. В конструктор передаёшь коллекцию строк с прокси. Можно сделать что-то типа
    def __init__(self, source):
      self.proxies = list(map(parse_proxy_line, source))

    Учитывая, что текстовый файл - это тоже коллекция строк, можно просто передать открытый файл.
    with open('whatever.txt', 'rt') as src:
      proxy_list = ProxyList(src)

    После этого с файлом не работаешь - незачем.
    3. Создаёшь поле класса, в котором хранишь индекс следующего прокси для выдачи. Можно обойтись без этого индекса, если список не будет использоваться повторно - тогда можно просто отдавать нулевой элемент списка, и сразу же удалять его.
    4. Пишешь метод, который по запросу берёт элемент списка с указанным индексом, затем увеличивает индекс. Это повторяется, пока не найдётся рабочий прокси или пока индекс не выйдет за пределы списка.

    Всё! Кода на 15 строчек (с учётом проверки).

    А вообще можно обойтись и без класса.
    from typing import Tuple
    def parse_proxy_line(line: str) -> Tuple[str, int]:
        # сработает, если на каждой строке указан порт
        addr, _, port = line.strip().rpartition(':')
        return (addr, int(port))
    def is_good_proxy(proxy: Tuple[str, int]) -> bool:
        host, port = proxy
        return ... #тут проверяешь, хороший ли прокси и возвращаешь True если да
    
    src = open('proxies.txt', 'rt')
    # Это - ленивое вычисление. Когда мы запросим следующий прокси, 
    # filter() будет запрашивать элементы, пока не найдёт "хороший",
    # т.е. такой, для которого is_good_proxy() вернуло True
    # В свою очередь, эти элементы будут запрашиваться из map(), 
    # которая будет брать элементы из src и вызывать для каждого parse_proxy_line()
    # А элементы в файле src - это текстовые строки, которые будут читаться по запросу.
    # Таким образом, нет необходимости хранить весь список прокси в памяти, 
    # они будут подгружаться по мере возникновения потребности.
    proxies = iter(filter(is_good_proxy, map(parse_proxy_line, src)))
    
    #когда нужно получить ещё один прокси:
    host, port = next(proxies) #next - встроенная функция
    #если прокси закончились, выкинет исключение StopIteration, которое можешь поймать и обработать как хочешь.
    Ответ написан
    8 комментариев