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

    @PavelMos
    Изменение значение по ключу =изменения значения
    Изменения ключа = создание нового ключа, с удалением или без удаления старого. По задаче, как понимаю, старый нужно удалять

    def KeyLen(d1):
        d2=d1.copy() #надо копировать один объект (словарь) в другой, т.к. если присвоить через =, то при измененении первого будет меняться и второй
        for k1 in d1.keys():
            k2=k1+str(len(k1))
            d2[k2]=d1[k1]
            del d2[k1]
        return (d2)
    Ответ написан
    1 комментарий
  • Можно ли в телеграме за бота получить все сообщения из канала?

    @PavelMos
    Сейчас в десктопном телеграмме есть функция экспорта истории с канала
    Ответ написан
    Комментировать
  • Передача данных между python скриптами?

    @PavelMos
    Если скрипты работают в интернете и на разных серверах, на разных сервисах, то через базу данных, sql или nosql вроде mongo.

    Если на одном компьютере, одной виртуалке и имеют доступ к одной и той же директории, то просто через запись и чтение из файла, или из локальной базы данных. В питон встроен sqlite.

    Файл наверное проще всего делать вроде JSON, в виде набора вложенных словарей ключ-значение. Читаете из файла весь словарь JSON, изменяете какой-то элемент или добавляете что-то и записываете словарь обратно.
    Ответ написан
    1 комментарий
  • Как можно заменить в словаре повторяющиеся значения?

    @PavelMos
    k1 = {"a_1":111, "a_2":104, "a_3":107, "a_4":90, "a_5":115, "a_6":107, "a_7":106, "a_8":107, "a_9":95, "a_10":116, "a_11":127, "a_12":115, "a_13":102, "a_14":99}
    k2 = {"b_1":113, "b_2":107, "b_3":123, "b_4":122, "b_5":117, "b_6":112, "b_7":105, "b_8":108, "b_9":111, "b_10":114, "b_11":102, "b_12":104}
    general_row = dict(sorted({**k1, **k2}.items(), key=lambda x: x[1]))
    general_row_copy = general_row.copy()
    k = 1
    for key in general_row_copy:
        general_row_copy[key] = k
        k += 1
    counter = 1
    sum_of_rank = 0
    listValues=list ( general_row.values() )
    uniqValuesDictDup={x:listValues.count(x) for x in listValues
                    if listValues.count(x)>1}
    
    for i in uniqValuesDictDup:
        #ключи исходного словаря [с дублями]
        t=[x for x in general_row if general_row[x]==i]
        #ключи-порядковые номера-ранги второго словаря
        k=[general_row_copy[x] for x in general_row_copy if x in t]
        av= sum(k)/len(t)
        print (t,k, 'среднее=',av)
        for j in t:
            general_row_copy[j]=sum(k)/len(t)
    
    for i in sorted(general_row_copy):
        print (i, general_row_copy[i], '\r')
    Ответ написан
    Комментировать
  • Кто может подробно обьяснить как сделать многоязычного бота?

    @PavelMos
    имхо сделать два набора таблиц для русского и английского текста, и в скрипте обращаться к ним не напрямую, а через словарь, где ключ - язык, а значение - имя таблицы.
    d={'ru':'tablR','eng':'tablE'}

    Можно два базы сделать раздельных, с одинаковыми таблицами. Только в коннекте к базе нужно подставлять имя рус или енг.

    скрипт для БД
    cur.execute('...select .... from ?', (d['ru']))
    Ответ написан
    1 комментарий
  • Как переписать Python код с версии 2.7 на 3.10?

    @PavelMos
    названия переменных проверить в новом скрипте.
    в одном месте list, в другом olist.
    И читайте выдачу ошибок, если непонятно - то см. в поисковике
    list это встроенная функция list(), питон допускает назвать так переменную, но так делать не надо - нельзя будет пользоваться функцией. Хотя, если она только внутри функции, может и безопасно.
    Ответ написан
    3 комментария
  • Сan only concatenate list (not "str") to list?

    @PavelMos
    emails имеет вложенные элементы --> при переборе попытка сложить в строку не str а список+str
    Ответ написан
    Комментировать
  • Как найти первые ячейки (по горизонтали и вертикали) в таблице, используя 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
    преобразовать 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...
    Ответ написан
    Комментировать
  • Собрать множество файлов в 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 не походит
    Ответ написан
  • Как проверить наличие всех элементов в массиве 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
    В таким виде имхо никак. Если именно такой вид нужен -отдельная колонка на каждую марку, то можно так
    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()


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