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

    @o5a
    Можно через str.translate удалить все указанные символы по списку
    text = 'Как съесть яблоко?'
    text = str.translate(text, str.maketrans('', '', '.,?:-;/\\'))
    Ответ написан
    9 комментариев
  • Не понимаю, как исправить ошибку. Почему выдает тип str?

    @o5a
    Проблема в использовании min(x) на
    x = pd.DataFrame(dataset.Open)
    В данном случае она возвратит название колонки, т.е. строку. Чтобы найти минимум по данным, надо явно указать, по какой колонке искать, т.е. min(x.Open)
    Или же изначально x делать не DataFrame, а Series
    x = pd.Series(dataset.Open)
    Тогда можно использовать min(x)
    Ответ написан
    Комментировать
  • Как создать DataFrame из xml?

    @o5a
    Не нужно перебирать элементы 'works' в том же цикле, где и добавляются строки к DF. Если их перебирать, то и складывать в одну строку (через запятые), а потом уже создавать запись в pandas. Или же вообще этот цикл заменить на join():
    for elem in root:
        elements = [elem[0].text, elem[1].text, elem[2].text, ','.join(val.text for val in elem[3])]
        df = df.append(pd.Series(elements, index=df_index), ignore_index=True)

    Еще стоит учесть, что в таком коде обращение по индексам (elem[0].text и подобное) создает жесткую привязку к позиции узла в xml. Если порядок поменяется, то столбцы будут парситься неверно. Возможно стоило использовать более явное указание: elem.find('name').text
    Ответ написан
    Комментировать
  • Как наложить фото на гринскрин в Python?

    @o5a
    Можно так например. Учитывая указанный цвет зеленого, заменяем его по всему гринскрину на прозрачный, затем подмешиваем второе изображение с учетом этой маски.
    Возможно есть более эффективные способы, но так тоже работает.
    from PIL import Image
    
    # заменяет указанный цвет на прозрачный
    def make_transparent(image, color):
        new = []
        for item in image.getdata():
            if item[:3] == color:
                new.append((255, 255, 255, 0))
            else:
                new.append(item)
        image.putdata(new)
    
    GREEN = (x, y, z) # указываем цвет нашего зеленого на "гринскрине"
    img_filename = "images/image.png"
    screen_filename = "images/green.png"
    
    img = Image.open(img_filename).convert('RGBA')
    screen = Image.open(screen_filename).convert('RGBA')
    
    make_transparent(screen, GREEN)
    
    new = Image.alpha_composite(img, screen)
    new.save('new_image.png')


    Другой вариант - аналогично перебирать оба изображения и использовать пиксели первого/второго в зависимости от цвета пикселя гринскрина.
    Ответ написан
    Комментировать
  • Почему не работает ИЛИ в re python?

    @o5a
    re.compile(r'WHERE(.+?)(GROUP BY|;)', re.S)
    Но для большей точности лучше добавить токены '\b' ограничивающие слова, иначе WHERE может поймать и как часть другого слова.
    Ответ написан
    3 комментария
  • Как к этому регулярному выражению добавить символы верхнего и нижнего регистра?

    @o5a
    Почитайте про флаги. В данном случае добавить re.I
    regex = re.compile(r'.*(.)(\1)(\1)(\1).*$', re.I)
    Ответ написан
    6 комментариев
  • Python Selenium как нажать на кнопку "отмена" в окне печати?

    @o5a
    find_elements_by_class_name возвращает список элементов, так что нужно добавить индекс нужного элемента.
    В данном случае предполагаю этот элемент только один, так что можно проще - использовать другую функцию, для единственного элемента:
    driver.find_element_by_class_name('cancel-button').click()
    Ответ написан
    9 комментариев
  • Xpath python как взять 2 элемент с похожим классом?

    @o5a
    find_elements_by_xpath выведет список всех элементов с таким xpath
    Ответ написан
  • Как правильно хранить в Sqlite числа с плавающей точкой что бы в дальнейшем удобно производить выборку по этим данным?

    @o5a
    Вы что-то намудрили при создании таблицы. У вас тип полей не real, а BLOB, это бинарный тип. Поэтому он и выдает такие значения. Возможно до этого экспериментировали и создали таблицу с типом BLOB, поэтому новая с типом REAL не пересоздалась. Грохните ее и создайте заново. Будет выдавать нормальные типы (real из sqlite должен выдавать как float)
    И заодно, по поводу структуры. Создавать 256 полей под 256 значений выглядит не очень, да и удобство сомнительное. Лучше было их записывать построчно, с нумерацией, т.е. таблица вида:
    (id_photo, h_num, h_value)
    тогда и запись будет не так монструозно выглядеть, и запрашивать нужное значение тоже удобно будет
    select * from photos where id_photo = ... and h_num = 1
    или
    select * from photos where h_num = 1 and h_value > 30
    Ответ написан
    1 комментарий
  • Правильно ли связанны мои таблицы в sqlite?

    @o5a
    1. Лучше не разделять таблицы с фото на 2 разных. Судя по описанию задачи структура и хранимые в них данные абсолютно идентичны по сути. Так что лучше использовать единственную таблицу для хранения всех этих вариантов фото. А для разделения (лицо/котики/возможно еще какой вариант захотите добавить) использовать отдельное поле в таблице, photo_type например.
    2. В представленном коде у Вас из таблицы фотографий идет FK на таблицу пользователей. Если таблица фото предполагает хранение самих данных (что за поле h1? это сами данные фото?), то правильнее сделать наоборот: в таблице пользователей хранить id из таблицы фото, с соответствующим FK.
    Т.е. примерно так
    CREATE TABLE IF NOT EXISTS users(user_id INTEGER  NOT NULL PRIMARY KEY, 
                    photo_id INTEGER NOT NULL, 
                    registration_date TEXT, 
                    actual_name TEXT, 
                    real_name TEXT, 
                    old_names TEXT, 
                    friends INT, 
                    level INT, 
                    country TEXT, 
                    profile_summary TEXT, 
                    src TEXT,
    FOREIGN KEY (photo_id) REFERENCES photos(id))
    
    CREATE TABLE IF NOT EXISTS photo_type(photo_type INTEGER PRIMARY KEY,
                      photo_type_name TEXT)
    
    CREATE TABLE IF NOT EXISTS photos(id INTEGER PRIMARY KEY AUTOINCREMENT,
                      photo_type INTEGER,
                      h1 INT,
    FOREIGN KEY (photo_type) REFERENCES photo_type(photo_type))

    3. По формату данных. Можно хранить как INT, FLOAT, насколько знаю там еще вроде можно NUMERIC, это как аналог десятичного числа.
    6.1000e+01

    А точно у Вас десятичные числа? Приведенный пример по факту целое число 61.
    массив из 256 не целых чисел в базу(гистограмму картинки)

    Как таковых массивов sqlite насколько знаю не поддерживает. Чтобы хранить придется заносить каждое число в отдельную строку с соблюдением порядка (id autoincrement в принципе с этим справится). Не факт, что это лучший вариант хранения этих данных, ведь по факту насколько я понимаю никогда не понадобится выбрать конкретное число из этой гистограммы, она нужна всегда только как массив - полностью записываем, полностью считываем.
    Так что для такой задачи возможно лучше не плодить их в таблице, а просто завести текстовое поле и хранить там этот список чисел в виде json. В sqlite можно даже написать автоматическое преобразование данных, т.е. в колонку пишется список, а сохраняется как json, аналогично при чтении. Пример.
    Ответ написан
    Комментировать
  • TypeError: 'module' object is not callable. Как исправить?

    @o5a
    telebot.py

    НЕ называйте больше свои скрипты так же, как сами модули (в данном случае telebot). При таком синтаксисе скрипт пытается импортировать такой скрипт вместо самого модуля телеграм.
    Ответ написан
    Комментировать
  • Почему перестали работать postgres запрос в Python?

    @o5a
    Ругается именно на то, что внутри одного with conn запустили еще один with conn. Проверьте свой код.
    Судя по документации и гуглящимся отзывам эту ошибку стали выдавать с версии 2.9, так что возможно раньше просто запускали на более старой версии, поэтому не встречали.
    Ответ написан
    Комментировать
  • Почему возникает ошибка "can only join an iterable" при повторном прохождении цикла? И как сравнить имя пользователя с именем ключа словаря?

    @o5a
    Так там join вообще не нужен, у Вас же в этом dic[key] хранятся просто целые числа.
    join используется для объединения последовательностей (список, кортеж, буквы из строки и т.п.) в одну строку.
    scoreN = dic[key]
    и в подобных местах, где строка, тоже заменить на число:
    dic[polsovatel.name] = 0
    Ответ написан
  • Как исправить ошибку импорта PyAutoGUI?

    @o5a
    Ответ написан
    Комментировать
  • Как извлечь IPv4 адреса из файла и сохранить их в другой средствами Python?

    @o5a
    Скорее всего проблема в самом поиске.
    Вместо поиска просто regexp IP по всей строке (re.search, re.findall) Вы пытаетесь разбить ее на слова:
    wordList = item.split()
    Но это же разбивает по пробелам. А если пробелов нет, то ничего и не найдет, тем более, что на пробелы заменяете только [',', ';']. Если в дампе строка например
    insert into .... values ('1.1.1.1','5.5.5.5')
    то он их и не найдет.
    Проще брать всю строку и искать через re.findall (сам шаблон такой же оставить).
    Ответ написан
  • Как перемешать двумерный список?

    @o5a
    random.shuffle() - перемешивает одномерный массив.

    Можно просто пройтись по строкам массива (двумерного списка) и применить к каждой shuffle. Затем применить shuffle к самому массиву.

    Это если в изначальном запросе подразумевается равномерное перемешивание элементов по всему массиву.
    Ответ написан
    Комментировать
  • Почему не двигается объект в pygame?

    @o5a
    Потому что сравниваете координаты не объекта hunter_1, а не связанные с ним координаты
    if hunter_pos_y < pos_y_rand:
            hunter_pos_y += 1

    когда должно быть примерно так
    if hunter_1.y < pos_y_rand:
            hunter_1.y += 1

    Аналогично и координаты целей (pos_y_rand). Сейчас координаты охотника сравниваются просто с этой рандомной точкой каждый раунд, а не с координатами реального объекта - цели.
    К тому же этот самый hunter каждый цикл создается заново, хотя по логике предполагаю он должен быть только 1.
    Т.е. создание объекта hunter нужно вынести наружу цикла, а координаты проверять по аттрибутам объекта, его же и двигать.
    Во-вторых, эти цели (звёзды?) в текущем виде нигде не сохраняются, каждый цикл предыдущие объекты-цели перезаписываются, остается только их изображение на экране. Т.е. координаты ранее созданных целей взять будет негде. Если все же логика работы была - ходить за этими целями, то их нужно хранить (самое простое - добавлять к списку).
    Ответ написан
    3 комментария
  • Слияние файлов exel и csv с использованием pandas?

    @o5a
    Если речь про то, что первая строка получает названия "Unnamed ...", то это потому что пытается определить названия колонок, а их нет. В данном случае проще всего отключить заголовки вообще, добавив во все функции (загрузка файлов и выгрузка) header=None
    file_csv = pd.read_csv("temp", header=None)
    Ответ написан
    Комментировать