• Как создать такой цикл?

    @o5a
    Приведите пример данных. Возможно запросы не соответствуют структуре.
    Из того, что есть, вижу 2 ошибки
    s = str(elem["sip"] + '\n')
    если elem["sip"] не текстовый, то подобная конструкция выдаст ошибку, т.к. str не правильно использован.
    f.readlines()
    ...
        if elem["sip"] in f:
    проверка не будет работать, т.к. f пустой, readlines() уже перемотал указатель в конец файла.
    Ответ написан
    2 комментария
  • Вычислить отстаток от деления обыкновенной дроби в Python?

    @o5a
    Судя по всему пытались сделать это
    print(Fraction(130296 % 27, 100))
    
    по факту просто
    130296 % 27
    если нужно только натуральное число, причем тут дробь вообще из контекста не ясно
    Ответ написан
  • Как передать dataframe в JSON и обратно?

    @o5a
    to_json формирует текстовую строку формата json из словаря данных dataframe
    to_dict формирует сам словарь

    Соответственно, если пытаетесь сделать так:
    dx = df.to_json(orient='split')
    datajs = json.dumps({"datj": dx})

    то datajs - это строка, а не словарь, поэтому брать от нее значения по ключу не получится
    "datj" нужно брать не от datajs, а от dx
    dx = json.loads(datajs)
    dg = pd.read_json(dx["datj"], orient='split')


    И если как написано изначально, вы передаете json в параметре x = json.damps("y": y, "dataframe": dataframe)
    то можно в "dataframe" передать словарь, который потом и закодируется в json через dumps
    x = json.dumps("y": y, "dataframe": df.to_dict(orient='split'))
    Ответ написан
    1 комментарий
  • Как модно искать частичные вхождения элементов списка в другом списке?

    @o5a
    хотелось бы иметь просто списки, а не списки специфических паттернов.

    Совсем не обязательно хранить как паттерны
    whitelist = ['Курск','Тамбов']
    income = ['Ярославский', 'Тамбов', 'Белгород', 'тамбовский']
    
    import re
    
    rc = re.compile(r"|".join(whitelist).lower())
    income = [text for text in income if rc.search(text.lower())]
    print(income)
    # ['Тамбов', 'тамбовский']
    Ответ написан
    1 комментарий
  • Почему бот не работает так, как это планировалось?

    @o5a
    Можно просто проверять как пересечение двух множеств
    if set(white_list_roles) & set(message.author.roles):
        # я админ, могу ругаться
    else:
        # я холоп, ругаться нельзя
        if any(bad_word in message.content for bad_word in black_list):
            await message.delete()

    Для учета регистра нужно там же использовать содержимое сообщения в нижнем регистре message.content.lower()

    В данной постановке не совсем понятно, как именно должен учитываться список разрешенных слов?
    Ответ написан
    2 комментария
  • Почему возникает ошибка "zip error: Nothing to do!", и как добавить список в список с помощью метода extend?

    @o5a
    Основная ошибка здесь:
    cop.split(',')
    вместо
    cop=cop.split(',')

    Из-за этого последующий ' '.join(cop) формирует не строку разных путей, а разбивает путь пробелами.

    По поводу extend не особо понятно, что добавлять, не описано, для чего вообще этот дополнительный кусок? Если цель просто повторять создание архивов из разных мест, то не нужно было делать эти манипуляции с cop

    Просто общий бесконечный цикл, в конце которого запрос повторения
    while True:
        # полностью первый блок кода с запросом данных и архивацией
        # после него
        repeat = input("Повторить (y/n) ?"
        if repeat != "y":
            break


    Для работы с zip еще есть модуль zipfile.
    Ответ написан
    1 комментарий
  • Есть рабочий телеграмм бот. Можно ли как то заносить ответы пользователей на кнопки в базу?

    @o5a
    Можно ли как то с помощью базы данных вытаскивать последовательность ответов пользователя и в конце на основании всех ответов выводит какой то текст.

    Так вопрос в том, как хранить данные этих опросов в базе или хотите полностью переделать систему опроса. Ведь сейчас диагноз итак формируется.
    В базе хранить лучше не в логике последовательности, а просто заносить все параметры. Т.е. таблица примерно с такими полями
    id - автоматически увеличивающийся идентификатор
    user - идентификатор/имя пользователя
    animal_type - вид животного "Дельфин" и т.п.
    temperature - температура
    и т.д., т.е. все запрашиваемые параметры в отдельном поле.

    Тогда можно в любой момент будет сделать запрос в базу данных как по пользователю, так и по id опроса, и по этим данным опроса выдать диагноз.

    Например, выдать данные последнего опроса выбранного пользователя:
    select anymal_type, temperature, ... from table where user = <user> order by id desc limit 1
    Ответ написан
  • Как получить последнею запись из SQLite?

    @o5a
    Если цель - сгруппировать данные товаров по каждому пользователю, можно заносить их в словарь, а затем объединить через join. Пример
    back_result = [
    ['ivan', 'ivan1', 'apple', '312', 3],
    ['ivan', 'ivan1', 'corn', '312', 5],
    ['ivan', 'ivan1', 'mac', '312', 1],
    ['ivan', 'ivan1', 'band', '312', 2],
    ['marc', 'marc22', 'pine', '6312', 23],
    ['marc', 'marc22', 'apple', '6312', 30],
    ]
    
    from collections import defaultdict
    
    user_products = defaultdict(list)
    for name, user_name, prodect, phone, quantity in back_result:
        user_products[(name, user_name, phone)].append([prodect, quantity])
    
    for user, products in user_products.items():
        print("Имя: {}, user_name: @{}, Телефон: {} ".format(*user) + ', '.join(f"{product} {quantity}шт" for product, quantity in products))

    Результат:
    Имя: ivan, user_name: @ivan1, Телефон: 312 apple 3шт, corn 5шт, mac 1шт, band 2шт
    Имя: marc, user_name: @marc22, Телефон: 6312 pine 23шт, apple 30шт
    Ответ написан
    Комментировать
  • Как внутрь строки поставить условие?

    @o5a
    Можно через format
    name = 'John'
    phone = '312'
    
    print("Имя: {name} {phone}".format(name=name, phone=f"Телефон: {phone}" if phone else ""))
    # Имя: John Телефон: 312
    
    phone = None
    print("Имя: {name} {phone}".format(name=name, phone=f"Телефон: {phone}" if phone else ""))
    # Имя: John
    Ответ написан
    Комментировать
  • Как импортировать класс из файла, который на другом сайте?

    @o5a
    Не понятно, причем тут другой сайт, но если вопрос в том, как выделить класс, то так.
    Сохранить весь класс InBot в файле, например inbot.py в той же папке, где main.py
    затем просто импортировать в main.py
    from inbot import InBot
    
    my_bot = InBot('./data.txt')

    Если речь про то, чтобы импортировать из файла с другого сайта, то никак. И непонятно, как такая задача возникла.
    Ответ написан
    Комментировать
  • Чего не хватает в коде по проверке соответствия пароля?, как правильно сделать?

    @o5a
    Это не понятно откуда взялось, оно тут явно лишнее
    re.search(r"\AThe", s),
    re.search(r"Spain\Z", s),


    Эту проверку
    re.search(r"[a-zA-Z]", s),
    нужно разделить на отдельные для верхнего и нижнего регистра [a-z], [A-Z]
    сейчас она ловит, если есть хотя бы одна верхнего или нижнего, а не И

    Проверка на пустую строку тоже не нужна, она итак учитывается в условии len(s)
    Ответ написан
    Комментировать
  • Как сделать progress bar статусным?

    @o5a
    Не совсем понятно, как связан прогресс бар, который показывает количественное/процентное отражение выполнения операции и отображение статуса (работает/спит), это скорее статус бар.

    Если все же хотите отображать прогресс бар с ручным регулированием (когда идет, когда стоит), то можно использовать tqdm.

    from tqdm import tqdm
    import time
    
    pbar = tqdm(total=100)
    
    time.sleep(1)
    pbar.update(10)
    Ответ написан
    Комментировать
  • Что делать pip не хочет скачивать pyown?

    @o5a
    pyowm
    Ответ написан
    Комментировать
  • Замера програма на python пока открита та програма яку я открив. Што нужно сделать?

    @o5a
    Вместо os.system используйте subprocess
    import subprocess
    subprocess.Popen(["notepad.exe", r"file.txt"])
    Ответ написан
    Комментировать
  • Как подсчитать все мои элементы в sql?

    @o5a
    Если в этой таблице заказов товар повторяется и задача в том, чтобы суммировать итог по товару, то это может делать сам SQL.
    Допустим, таблица orders с полями
    "item" - товар
    "quantity" - кол-во
    "amount" - сумма по этой позиции
    То запрос будет выглядеть примерно так
    SELECT item, SUM(quantity), SUM(amount) FROM orders GROUP BY item

    Он выведет суммарное кол-во и стоимость по каждому отдельному товару.
    Ответ написан
  • Операции с pandas. Python. Есть ли возможность использовать массив индексов?

    @o5a
    С примером Вашего кода было бы понятнее, но вообще это можно сделать так:
    df.loc[dfi['index']]
    df - DF с данными
    dfi - DF с индексами в колонке 'index'
    Ответ написан
    Комментировать
  • Как сделать, чтобы пришло всё одним сообщение от бота?

    @o5a
    a = ['с1', 'с2' ]
    print("\n".join(a))
    # с1
    # с2
    Ответ написан
    Комментировать
  • Как создавать файлы с датой в название?

    @o5a
    Для создания нужного имени можно использовать форматирование строки или f-строки.
    strftime для нужного формата даты.

    import datetime
    
    N = "work"
    
    filename = "old_{}_{}.txt".format(N, datetime.date.today().strftime("%d-%m-%y"))
    print(filename)


    Для проверки существования файла os.path.exists(путь_к_файлу)
    Для переименования os.rename(откуда, куда)
    Ответ написан
    Комментировать
  • Почему возвращается пустой список?

    @o5a
    Т.к. filter возвращает итератор, то повторное использование его результатов возвращает пусто.
    Насколько понял пытались сделать так
    wick_successfully = filter(lambda x: x not in wick_not_successfylly, wick_successfully)
    print(list(wick_successfully))
    woduplicates = list(set(wick_successfully)) 
    print(woduplicates)

    После строки print(list(wick_successfully)) итератор wick_successfully уже пуст, поэтому последующие его вызовы и возвращают пустой список.

    В данном случае будут работать варианты:
    1. не использовать print(list(wick_successfully))
    2. сразу получить список из фильтра
    wick_successfully = list(filter(lambda x: x not in wick_not_successfylly, wick_successfully))

    3. вообще не использовать фильтр, а сделать то же самое через list comprehension
    wick_successfully = [x for x in wick_successfully if x not in wick_not_successfylly]
    Ответ написан
    Комментировать