• Сan only concatenate list (not "str") to list?

    @PavelMos
    emails имеет вложенные элементы --> при переборе попытка сложить в строку не str а список+str
    Ответ написан
    Комментировать
  • Как экранировать кавычки внутри кавычек?

    @PavelMos
    Конкретно в таком случае можно имхо попробовать просто по известным комбинациям заменять через replace.
    Если в строке подряд две кавычки, заменять на \""
    Ответ написан
    Комментировать
  • Как найти первые ячейки (по горизонтали и вертикали) в таблице, используя python и openpyxl?

    @PavelMos
    Это реальная задача или упражнение ?
    Надо для каждого варианта, один, два, три перебирать все ячейки. Те адреса, где встретилось, запоминать в список. Далее по списку брать адреса, делить на строку и столбец и далее перебирать всю соответствующую строку и соответствующий столбец в поиске имён.

    Здесь ещё нужен словарь который в нужных столбцах и строках, на пересечении которых расположены ячейки с 'один', 'два','три' ищет только имена и отбрасывает ненужные слова т.е. 'один', 'два','три'
    Ответ написан
    Комментировать
  • Telegram bot: 'cannot cannot import name 'Animation' from 'telegram', как избавиться от ошибки?

    @PavelMos
    Анимейшн это первый пункт в модуле телеграм при загрузке составляющих пакета
    Возможно, не загрузился модуль телеграм вообще, не правильно установлен, не обновилась среда после установки.

    #!/usr/bin/env python
    # pylint: disable=E0611,E0213,E1102,E1101,R0913,R0904
    #
    # A library that provides a Python interface to the Telegram Bot API
    # Copyright (C) 2015-2022
    # Leandro Toledo de Souza <devs@python-telegram-bot.org>
    #
    # This program is free software: you can redistribute it and/or modify
    # it under the terms of the GNU Lesser Public License as published by
    # the Free Software Foundation, either version 3 of the License, or
    # (at your option) any later version.
    #
    # This program is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    # GNU Lesser Public License for more details.
    #
    # You should have received a copy of the GNU Lesser Public License
    # along with this program.  If not, see [http://www.gnu.org/licenses/].
    """This module contains an object that represents a Telegram Bot."""
    
    import functools
    import logging
    import warnings
    from datetime import datetime
    
    from typing import (
        TYPE_CHECKING,
        Callable,
        List,
        Optional,
        Tuple,
        TypeVar,
        Union,
        no_type_check,
        Dict,
        cast,
        Sequence,
    )
    
    try:
        import ujson as json
    except ImportError:
        import json  # type: ignore[no-redef]  # noqa: F723
    
    try:
        from cryptography.hazmat.backends import default_backend
        from cryptography.hazmat.primitives import serialization
    
        CRYPTO_INSTALLED = True
    except ImportError:
        default_backend = None  # type: ignore[assignment]
        serialization = None  # type: ignore[assignment]
        CRYPTO_INSTALLED = False
    
    from telegram import (
        Animation,
        Audio,
    Ответ написан
    Комментировать
  • Как написать регулярное выражение по поиску текста в скобках?

    @PavelMos
    Не проще ли идти так :
    1 любое количество любых символов до сочетание ( и пробела
    2 любое количество символов до двух закрывающие скобок, причём в этом выражении сделать группу, в которую последние две скобки не будут входить
    После применения регексп, как правило, возвращает сначала всё, что найдено, потом найденные группы по порядку.
    Соответственно, будет, например
    s='AnyAharacters(((((( AnyAhrr22aracters&#+-123(((( Взять zz(()))только этот текст ))'
    r='.*\(\s(.*)\){2}$'
    re.match(r,s)
    Out[36]: <_sre.SRE_Match object; span=(0, 82), match='AnyAharacters(((((( AnyAhrr22aracters&#+-123(((( >
    re.match(r,s)[1]
    Out[37]: 'Взять zz(()))только этот текст '
    s2="AnyAharacters(AnyAharacters&#+-123( Взять только этот текст ))"
    re.match(r,s2)[1]
    Out[44]: 'Взять только этот текст '


    Но это только если есть конкретный маркер (+пробел. Если будет другое сочетание или в тексте будут еще сочетания (+пробел, может не сработать, нужно что-то сложнее
    Ответ написан
  • Как удалить в списке значения, которые повторяются?

    @PavelMos
    преобразовать list в set , в сете останутся только уникальные элементы (тк не все функции могут принимать set вместо list, можно на всякий случай преобразовать снова в тип "список")
    но тут не набор уникальных элементов нужен, а обрезать всё, что после инстаграмма. Если именно так, то, зная, где резать, можно в каждом элементе в генераторе списка отбрасывать первые 26 символов и последний
    i=[i.find_element_by_tag_name('a').get_attribute('href')[26:-1] for i in all_urls]

    если не получится, то еще раз прогнать
    i=[x[26:-1] for x in i]
    Ответ написан
    1 комментарий
  • Как достать значение ключа из словаря?

    @PavelMos
    У словарей же есть функция keys
    list (some_list[0].keys() )
    вернёт список ключей, который надо преобразовать в обычный список, а тк ключ по этой структуре списка всегда один, в нём будет как раз этот один элемент

    если нужны все ключи именно тех словарей, что вложены в список, то перебрать и сохранить, например, в тупле
    [(i,  list(some_list[i].keys())[0]) for i in some_list]
    Ответ написан
    Комментировать
  • Как выводить только цифры и буквы в print?

    @PavelMos
    Непосредственный ответ - никак, потому что принт не фильтрует символы при выводе. Значит, ненужные символы надо удалить из объекта печати до print.

    У print есть модификаторы * и ** но они не для этого, а для оформления печати списков, словарей

    https://yandex.ru/search/?text=python+print+%D1%81...
    Ответ написан
    Комментировать
  • Openpyxl. Как подсчитать без цикла количество элементов в конкретной колонке в EXEL?

    @PavelMos
    Так же, как и через генератор списков проверить в списке число определенных элементов, измерив длину отфильтрованного списка
    Пустая ячейка в опенпуксель это None

    l=[wb['Sheet1']
    ['B'+str(row)].value for row in range (2, wb['Sheet1'].max_row+1) 
    if (wb['Sheet1']['B'+str(row)].value)!=None]
    len (l)

    если нужно перебрать все столбцы, то через цикл, в котором будут изменяться адреса ячеек - A, B, C...
    Или сделать генератор вложенного списка по буквам столбцов
    Ответ написан
  • Собрать множество файлов в python?

    @PavelMos
    Модуль os. Если не установлен, установить через pip который в питоне в директории scripts.

    import os
    from os import walk
    dir1='xxxxxxxxx'
    f = [] #список куды будут добавляться имена файлов из dir1
    for (dirpath, dirnames, filenames) in walk(dir1): #dirpath - путь к директории, не нужен, dirnames - имена вложенных директорий, не нужны, filenames - имена файлов
        f.extend(filenames)
        break
    print (f)


    будет именно список файлов, но не полных путей к файлам
    полный путь можно сделать, добавив каждому dir1
    f=[dir1+x for x in f]
    Ответ написан
  • TypeError: 'NoneType' object is not callable телеграм бот?

    @PavelMos
    Тут же прямо написано - AttributeError: module 'telebot.types' has no attribute 'ReplyKeyboardRemove'
    1. посмотреть в описании или через telebot.types.__dir__() какие есть аттрибуты и методы у telebot.types
    2. там есть ReplyKeyboardRemove, и это функция (метод), а не аттрибут, то есть его надо вызывать со скобками с какими-нибудь параметрами или без параметров

    так же в поиске см на ReplyKeyboardRemove

    Самофикс - посмотрел скрипт, ReplyKeyboardRemove вызывается как функция, но в ошибке нет такого атрибута. Надо разбираться.
    Ответ написан
  • Как в Python проверить Excel таблицу, если заданное значение есть таблице - вывести всю строку?

    @PavelMos
    проще через pandas импортировать эксель в датафрейм чем открывать через какой-нибудь питоновский эксель-модуль и работать со столбцами, ячейками
    df1=pandas.read_excel(путь, header=0)
    print (df1.loc[df1['Боец']=='антон'])


    а если надо в двумерный массив, то
    List=df1.to_numpy().tolist()
    Ответ написан
    1 комментарий
  • В чем проблема?

    @PavelMos
    На других страницах сайта в ответе содержится сообщение Oops! Please enable JavaScript and Cookies in your browser

    Вообще пишут тута например
    https://ru.stackoverflow.com/questions/749943/%D0%...
    что BS для Javascripta не походит
    Ответ написан
  • Как осуществить разбор подстрок одном выражением?

    @PavelMos
    так как в массиве могут быть разные строки, в том числе включающие разные специальные символы, проще брать целиком строку от [ до ], а потом через eval присвоить это какому-то новому объекту

    urls.+(\[.*\]);\n

    UPD
    разобранную строку между [ и до ] можно преобразовать в список через split по
    " , "
    только брать за вычетом первого и последнего элемента- кавычек в начале и в конце строки. Если кавычки будут не двойные, а одинарные, то это нужно проверить и разбивать уже по ним.
    Ответ написан
  • Как проверить наличие всех элементов в массиве Python?

    @PavelMos
    Если нужно включение в условие всех имён, то, имхо если только создавать функцию проверки и включать в скрипт или конструировать, чтобы не писать долго руками, выражение условия с проверкой с перечислением имён, а потом запускать его через eval().

    student = ["Вася", "Петя", "Ваня", "Света"]
    s1=s=['(print (\"Все студенты на месте. Начинаем занятие!\")) if ( "'] +['" and "'.join(student)]+['\" in student) else ( print (\"Отсутствующие к экзамену допущены не будут\"))']     
    s2=''.join(s1)
    eval(s2)


    Если же оригинальный список заранее известен и в нём и проверяемом списке всё по порядку, или они сортируются перед проверкой, то можно просто списки сравнить.
    Ответ написан
    Комментировать
  • Есть DataFrame c инфой о людях. Как можно вывести имя человека с максимальным ростом?

    @PavelMos
    Записей с макс. ростом может быть несколько.
    Значит, сначала нужно взять макс. рост
    p1['height'].max()
    затем сделать loc
    p1.loc[p1['height]==p1['height'].max()]['name']
    или сразу в список, где будет одно или несколько значений
    p1.loc[p1['height]==p1['height'].max()]['name'].tolist()

    можно к значениям обращаться через
    p1.loc[p1['height]==p1['height'].max()]['name'].values
    , если, например, известно, что нужно взять только первое ..values[0]. Если, конечно, известно, что оно будет существовать
    Ответ написан
    1 комментарий
  • Не могу составить регулярное выражение, что я делаю не так?

    @PavelMos
    если нужно брать 3 или 4 точки, то сначала делать выражение для 2 точек, а далее использовать конструкцию ИЛИ она же альтернация, которая будет брать следующую 1 или 2 точки.

    [a-zA-Z0-9]+\.[a-zA-Z0-9]+(\.[a-zA-Z0-9]+\.[a-zA-Z0-9]+\.[a-zA-Z0-9]+)

    https://regex101.com/r/10ZqvF/1

    Вот тута, например, про это:

    https://learn.javascript.ru/regexp-alternation
    Ответ написан
    Комментировать
  • Написать регулярное выражение удаление превого слова?

    @PavelMos
    Можно без регулярного, а через split по пробелу, взять всё, кроме первого ([0]) элемента, потом сделать обратный join, чтобы восстановить пробелы
    ' '.join('Samsung Galaxy S21 Silver'.split(' ')[1:])
    Ответ написан
    Комментировать
  • Как правильно проверить?

    @PavelMos
    В таким виде имхо никак. Если именно такой вид нужен -отдельная колонка на каждую марку, то можно так
    1) получить строку по id пользователя, кол-во элементов (1 или 0) в строке заранее известно и оно соответствует числу марок (список marka) .
    2) сгенерировать словарь d={marka[x]:stroka[x] for x in range (0, len(makra))}
    3) затем выбрать из словаря ключи (марки), где значения будут=1
    Ответ написан
    Комментировать
  • Как добавить элементы из списка в бд?

    @PavelMos
    Кавычки нужны для вставки текстовых значений. А также напутано с cur и con
    cur = con.cursor()
        sql = 'INSERT INTO base_url(url, name) VALUES("{}", "url")'.format(element) # здесь element является url адресом, а url это просто обозначение для второго столбца name
        print (sql)
        cur.execute(sql)
        con.commit()
    con.close()


    нужна также проверка при создании таблицы на то, существует ли она уже.
    Ответ написан
    Комментировать