Как скопировать сообщение пользователя в телеграмме с помощью бота и ввести его в базу данных
я являюсь начинающим, и балуюсь с базой данных, возник вопрос. Использую модуль sqlite3, и aiogram. Возник вопрос, как взять следующее сообщение пользователя, и засунуть его в базу данных? Какими методами, можно прибегнуть?

Для начала вам стоило бы для начала хоть немного разобраться в теме, благо интернет ещё не запретили.
Насчёт конкретики.
Если вам нужно получить сообщение вам нужен хендлер который это сообщение ловит. После того как вы словили его вы обращаетесь к сообщению и потом переводите его в json и как строку закидывает в бд.
<code>
from aiogram import types
@dp.message_handler()
async def echo(msg: types.Message):
    json_msg = msg.to_json()
</code>
Запись строк в бд, не сложно сделать и я уверен вы сможете сделать это в течении 10-15 минут. Достаточно запроса в Гугл "как записать данные в бд sqlite".


Нужно найти ключ по значению. JSON. Python

{ "2022-01-01": "weekend", "2022-01-02": "weekend", "2022-01-03": "holiday weekend", "2022-01-04": "holiday weekend", "2022-01-05": "holiday weekend", "2022-01-06": "holiday weekend", "2022-01-07": "holiday weekend", "2022-01-08": "weekend", "2022-01-09": "weekend", "2022-01-10": "workday", "2022-01-11": "workday", "2022-01-12": "workday", "2022-01-13": "workday" }
Мне надо по значению вывести дату. В данном случае из значений "holiday weekend". Как это можно сделать?

Если у вас json-нина для начала следует конвертнуть ее в словарь python.

import json

d = json.load(#your json)
print(type(d))

Если все сделано верно в консоли cпринтится class 'dict' и если я правильно понял условие вашей задачи:

for key,value in d.items():
  if value == 'holiday weekend':
     print('key:',key)


Как объединить 2 датафрейма по значениям?
Есть 2 датафрейма:

a
b

1
1

2
2

3
3

4
4

и

a
b

1
x

2
y

10
z

Как объединить датафреймы так, чтобы значения(b) из 2-го датафрейма попали в значения 1-го по совпадению колонки a, если будет значение a, которого нет в 1 датафрейме, то его не добавлять?
Вот как будет выглядеть итог:

a
b

1
x

2
y

3
3

4
4

можно обойтись обычным маппингом:

df1["b"] =  df1["b"].map(df2.set_index("a")["b"]).fillna(df1["b"])

теперь df1:

   a  b
0  1  x
1  2  y
2  3  3
3  4  4


re - выделить число из строки
Я написал небольшой код. Моя цель — вывести пользователя, когда он введет число, например 5,5 или 5,5, вывести Y на консоль. Теперь, если пользователь вводит число, например 123.3 у меня работает код. Но при вводе числа типа 123,3 выдает ошибку. Можно ли это исправить?
<code>
import re
pattern = '\d{1,7}\.\d'
user = input()
if (re.search(pattern, user)):
    a = float(user)
    print(a, type(a))
    print("Y")
else:
    print("N")
</code>

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

import re
pattern = r'^(\d{1,7})[.,](\d)$'
user = '123,3'
m = re.search(pattern, user)
if m:
    a = float(f'{m.group(1)}.{m.group(2)}')
    print(a, type(a))
    print("Y")
else:
    print("N")

См. пример работы кода.

^ - начало строки

(\d{1,7}) - захватывающая подмаска №1 (
m.group(1)): от одной до семи цифр

[.,] - точка или запятая

(\d) - захватывающая подмаска №2 (
m.group(2)): одна цифра

$ - конец строки.


Как внести данные JSON? python
Есть JSON следующего строения:

[
   {"id":"1"},
   {"id":"2"}
]

Как сюда можно добавить третий элемент, чтобы получилось вот так:

[
   {"id":"1"},
   {"id":"2"},
   {"id":"3"}

]

Декодируйте JSON в Python-объект, добавьте в него новые данные, а затем закодируйте обратно. Всё это Вы можете сделать с помощью стандартного модуля
json.
Пример:

import json

s = '[{"id":"1"},{"id":"2"}]'

d = json.loads(s)
d.append({'id': '3'})

s = json.dumps(d)
print(s)

stdout:

[{"id": "1"}, {"id": "2"}, {"id": "3"}]


не могу разобраться с оператором 'or' в Python
Только начал с нуля изучать, заранее прошу прощения если вопрос тупой или неправильно написан. Не могу разобраться. Пытаюсь написать, чтобы строка  спрашивала что ввести, когда человек вводит что-то,  х принимает тип написанного(строка это или число). Но также хочу в elif перечислить типы, которые не подходят. Чтобы в итоге человек ввел только положительное число. Для этого еще нужен цикл, но и он не получается тоже. Долго уже пробую, так как знаний нет совсем, не получается и вопрос корректно в гугле задать не могу. Ответьте развернуто пожалуйста
while True:
x = input("Введите цифру")

if x.isdigit:
    print(int(x) / 100)
elif type(x) == float or (x < 0) or (x == 0):
    print('Введите положительное число')
else:
     print('Введите именно цифру')

Ошибка:

Traceback (most recent call last):
    File "C:/Users/Кирилл/PycharmProjects/pythonProject/test.py", line5,  in <module>
         print(int(x) / 100)
ValueError: invalid literal for int() with base 10: 'ui'

Для начала продумайте алгоритм.

Вам нужно создать цикл, который будет выполняться раз за разом до тех пор, пока пользователь не введет цифру. Легче всего этого добиться через бесконечный цикл
while, который при удовлетворяющем нас вводе мы просто прервем через
break
Нужно каждый раз проверять, что введенное пользователем - цифра. лучше это делать через встроенный строковый метод
isdigit.
Если ввод нас устраивает, выполняем задуманное действие (делим на 100, например, предварительно переведя ввод пользователя в тип integer (потому что любой ввод - это строка) и прекращаем цикл через
break.
Если ввод не устраивает - выводим предупреждение и продолжаем цикл дальше.

while True:                    # создаём бесконечный цикл
    x = input("Введите цифру") # получаем ввод пользователя
    if x.isdigit():            # проверяем, является ли ввод цифрой
        print(int(x)/100)      # выводим на печать, выполнив деление
        break                  # прерываем бесконечный цикл
    else:                      # если ввод - не цифра, то выводим
        print("Нужно ввести цифру!")  # ругательство

UPDATE
Пример использования
or. Здесь проверка ввода производится наоборот - если ввод пользователя не является цифрой (not isdigit), или (or) эта цифра равна 0, то ругаемся и повторяем цикл. В противном случае, делим полученную цифру на 100:

while True:
    x = input("Введите цифру")
    if not x.isdigit() or int(x)==0:
        print("Нужно ввести цифру!")
    else:
        print(int(x)/100)
        break


Как проверить, есть ли в списке определённое число?
Нужно проверить есть ли число 2 в списке: "3, 4, 21, 22, 23"
Пробовал:
<code>
async def check1():
    list1 = "3, 4, 21, 22, 23"
    check = "2"
    if list1.find(check) != -1:
        print("число 2 найдено!")
    else:
        print("2 не найдено")
</code>
Однако получаю в ответ "число 2 найдено"
Подскажите пожалуйста, что с этим можно сделать?

Например, с помощью регулярных выражений:

import re

async def check1():
    list1 = "3, 4, 21, 22, 23"
    check = "2"
    rx = re.compile('\d+')         # <- добавлено
    if check in rx.findall(list1): # <- изменено
        print("число 2 найдено!")
    else:
        print("2 не найдено")

Здесь я ищу все числа в строке с помощью шаблона
\d+ и проверяю, что среди этих чисел есть искомое.


Ошибка: client_session: <aiohttp.client.ClientSession object at 0x0000000004CC4A60> Unclosed connector connections:
Ошибка: client_session: <aiohttp.client.ClientSession object at 0x0000000004CC4A60>
Unclosed connector
connections: ['[(<aiohttp.client_proto.ResponseHandler object at 0x0000000004C9BCA0>, 20902.839)]']
connector: <aiohttp.connector.TCPConnector object at 0x0000000004CC4520>
Использую aiogram для проверки подписки пользователя на бота.
<code>
bot = Bot(token)
await bot.me
await bot.send_chat_action(user_id,'choose_sticker')
</code>
Код исправно работает, но выходит это "предупреждение".
Из-за чего это сообщение может появляться. И как его можно скрыть? (любыми методами)

Можно так:
<code>
# ... ваш код
s = await bot.get_session()
await s.close()
</code>


Найти все элементы в списке после определенного
Есть список:

spisok = ['вася','петя','кирилл','анна','дима']

Мне нужно чтобы переменная
var elmnt была равна всем элементам из списка
spisok после определенного индекса.
То есть если взять индекс 2 (это будет
кирилл), то мне нужно чтобы переменная
elmt была равна
анна дима. Количество элементов может изменяться, но мне нужно чтобы были известны все значения элементов после определенного индекса.

def Fun1(spisok, word):
    i = 0
    for x in spisok:
        if x == word:
            return i
        i += 1
    return 0
def Fun2(spisok, word):
    string = ""
    i = Fun1(spisok, word) + 1
    for x in range(i, len(spisok)):
        string += " " + spisok[i]
    return string

Вызовите
Fun2(spisok, word), передав массив и слово.

s = Fun2(['вася','петя','кирилл','анна','дима'], "кирилл")
print(s)

Вывод:

анна дима


Запись переменной через кнопку
Можете подсказать, как можно по нажатию кнопки записать данные в переменную? Точнее, насколько обработчик этой кнопки будет большой, или это можно будет сделать в аргументах кнопки. Или мне попробовать это реализовать через callback_data, которые можно будет перезаписывать? У меня всплывает много вариантов решения этой "сложной" задачи, но не могу понять как будет правильнее
Код:
<code>
@dp.callback_query_handler(text="vipcount")
async def vipcount(query: CallbackQuery):
    keyboard = InlineKeyboardMarkup(row_width=3).add(
        InlineKeyboardButton(text=1, callback_data="buyvip"), #<--- эта кнопка должна поставить в переменную какое-либо значение
        InlineKeyboardButton(text=2, callback_data="buyvip"),
        InlineKeyboardButton(text=3, callback_data="buyvip")
    )
    await query.message.edit_text(text, reply_markup=keyboard)
</code>
Обработчик, который будет использовать эти переменные планируется реализовать отдельно, не в этой функции. Заранее спасибо за помощь🙌
p.s. пишу на уставшую голову. если что-то надо будет объяснить подробнее - на связи

Из задачи вам нужно что-то типо этого.
<code>
#Клавиатуру сделай так
keyboard = InlineKeyboardMarkup(row_width=3).add(
    InlineKeyboardButton(text=1, callback_data="buyvip:1"), #<--- эта кнопка должна поставить в переменную какое-либо значение
    InlineKeyboardButton(text=2, callback_data="buyvip:2"),
    InlineKeyboardButton(text=3, callback_data="buyvip:3")
)

variable = 0

@dp.callback_query_handler(text_startswith="buyvip")
async def buyvip(query: CallbackQuery):
    await query.answer()
    global variable
    variable = int(query.data.split(":")[1])
</code>


Ошибка при сортировке по столбцу, содержащему строки и числа
Подскажите, почему происходит ошибка при сортировке по столбцу, если он содержит текст и числа?

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {
        "A": ["foo", 1, "foo", "bar", "foo", "bar", "foo", "foo"],
        "B": ["one", "one", "two", "three", "two", "two", "one", "three"],
        "C": np.random.randn(8),
        "D": np.random.randn(8),
    }
)
df.sort_values(by=["A"])

Получаю ошибку:

TypeError: '<' not supported between instances of 'int' and 'str'

Ну потому что непонятно, как сравнивать числа и строки (а для сортировки нужно сравнивать). Можно принудительно сделать всё строками в момент сравнения:

df.sort_values(by=["A"], key=lambda x: x.astype(str))
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^ сортируем как строки

Но учтите, что сравнение (и сортировка) чисел и строк происходит по-разному, например:
2 < 10, но
'2' > '10'.
Если хотите чтобы было всегда "натуральное" сравнение строк и чисел, то нужно использовать специальные библиотеки вроде
natsort.


Преобразование списка списков в список словарей
Есть табличные данные в виде списка со структурой:

raw_data= [
  ['id', '1', '2', '3'],
  ['email', '[email protected]', '[email protected]','[email protected]'],
]

т.е. это таблица в виде списка списков, где
raw_data[n] это столбец (столбцов много, 62), а
raw_data[n][0] название столбца. Нужно преобразовать это в список словарей:

data= [
{'id': '1', 'email': '[email protected]'},
{'id': '2', 'email': '[email protected]'},
{'id': '3', 'email': '[email protected]'},
]

Ясно, что это можно делать через вложенные циклы, т.е. для каждого
raw_data[n][i] брать
i элемент и добавлять в словарь.
Возможно есть какое-то более элегантное/pythonic решение?

При условии что количество элементов в каждом из дочерних списков одинаковое:

from typing import List, Tuple
from pprint import pp

raw_data = [
    ['id', '1', '2', '3'],
    ['email', '[email protected]', '[email protected]', '[email protected]'],
    ['phone', '+000000000000', '+1111111111111', '+33333333333333']
]

def to_items(elements: list) -> List[Tuple]:
    key, *values = elements
    return [
        (key, value,)
        for value in values
    ]

p = [dict(elem) for elem in
    zip(*map(
        to_items, raw_data
    ))
]

pp(p)

Output

[{'id': 1, 'email': '[email protected]', 'phone': '+000000000000'},
 {'id': 2, 'email': '[email protected]', 'phone': '+1111111111111'},
 {'id': 3, 'email': '[email protected]', 'phone': '+33333333333333'}]


сортировка списка по гласным Python
Ка отсортировать список по количеству гласных.
к примеру есть список
my_list = ['test', 'bob', 'send', 'itemy']
нужно отсортировать значения по количеству гласных
сделал подсчет гласных
потом сделал упаковку двух списков в словарь и сортировку через sorted().
быть может есть способ проще?

В методах сортировки
sort и
sorted есть параметр
key по нему можно указывать критерии, например возвращать количество гласных
Пример:

my_list = ['test', 'bob', 'send', 'itemy']
my_list.sort(key=lambda x: sum(c in "aeiou" for c in x))
print(my_list)
# ['test', 'bob', 'send', 'itemy']


Группировка данных по месяцам
У меня есть массив данных: браузерные сессии разделенные по датам примерно так (в массиве данные за год):

Браузер
Дата посещения

Firefox Mobile
23.01.2020

Opera
13.01.2020

Яндекс.Браузер
14.01.2020

Яндекс.Браузер
31.01.2020

Opera
07.02.2020

Я уже третий день пытаюсь сгруппировать данные таким образом, чтобы у меня выводилось количество сессий на определенных браузерах за месяц.
Я понял, что можно посчитать общее количество сессий за месяц, например так:
<code>
df.groupby(df['Дата посещения'].dt.strftime('%B'))['Браузер'].count()
</code>
что даст результат:

Дата посещения

February
1

January
4

Но как при этом разбить эти значения по браузерам, внутри месяца и можно ли это сделать?

Можно сделать так:

res = df.groupby([pd.Grouper(key='date',freq='M'), "browser"])["date"].count()

res:

date        browser
2020-01-31  Firefox Mobile    1
            Opera             1
            Яндекс.Браузер    2
2020-02-29  Opera             1


aiorgam python обработка сообщений от пользователя
Для начала. Многие, кто работают с aiogram, знают о конструкции:

class name_class(StatesGroup):
    mess = State()

Он хранит сообщение пользователя (но обрабатывает только текст введенный пользователем). Но проблема и вопрос в чем. Вопрос в том как с помощью aiogram можно принимать сообщения от пользователей с файлами, прицепленной музыкой или еще чем-то. Все, что мне нужно будет взять из такого рода сообщения - это message.chat.id и message.message_id.
Если в aiogram нету такого способа обработки сообщений, то можно объяснить как это сделать через прямые запросы (telegram bot api + request).
Заранее всем спасибо!!!
:Правка + пример кода:

class accept_new_massage(StatesGroup):
    mess = State()
    shortD = State()

@dp.callback_query_handler(text="save_new_massage")
async def Save_new_massage(query: types.CallbackQuery):
    await bot.answer_callback_query(query.id)
    await accept_new_massage.mess.set()
    await query.message.answer("Введите ваше сообщение: ")

@dp.message_handler(state=accept_new_massage.mess)
async def Аccept_new_massage(message: types.Message, state: FSMContext):
   global temporaryMemory

    temporaryMemory.append({
        "userID": message.chat.id,
        "typeActions": "saveMes",
        "data":{
            "IDMessage": message.message_id,
            "shortDescription": None,
            "levelOfBeingChosen": 0,
            "listOfHashtags": None
        }
    })

Вообщем... Когда я отправляю телеграм боту сообщение имеющее не только text, но еще и какой то фаил или фото или музыку, то accept_new_massage не принимает это за сообщение и не запускает функцию Аccept_new_massage по хендлеру введенного пользователем сообщению. Если стало более понятно То это хорошо.

Делай вот так
<code>
@dp.message_handler(state=accept_new_massage.mess, content_types=types.ContentTypes.ANY)
</code>
Теперь он должен ловить всё.


Проблема с заданием на ограничение ввода информации
Задание 1
Условие: Необходимо ввести 10 чисел с клавиатуры, после чего получаем на экран сумму всех введенных чисел.
Я сделал это задание, но, ограничение по сумме срабатывает тогда, когда программа видит 0 в значении. А мне по заданию надо чтобы ограничение сработало на десятое значение и высчитало сумму.
Например:
Enter numbers (up to 10 values inclusive):
Ввожу 1 2 3 4 5 6 7 8 9 10 и после того как ввёл 10 (как 10 значение), и нажал Enter, оно мне выдало Sum: 55
Либо же
Ввожу 3 9 2 15 2 3 8 9 6 5 и после того как ввёл 5 (как 10 значение), и нажал Enter, оно мне выдало Sum: 62
Надеюсь я суть донёс, что я хочу чтобы получилось.
Моя "неправильная" версия:
<code>
var0_1 = 0 # Sum
print('Enter numbers (up to 10 values inclusive):')
while True:
    var0_2 = int(input())
    if var0_2 == 0:
        break
    else:
        var0_1 += var0_2
print('Sum: ', var0_1)
</code>
Итог
Сумма прекращается когда в input поступает значение 0. А надо чтобы сумма прекращалась на вводе десятого значения, при этом, цифра может быть любой. Ограничений на числа нет.
P.S.
Не судите если вопрос действительно лёгкий, или я слишком глуп. Хотелось бы с объяснением пусть и небольшим + исправление решения. Новичёк в этом всём, по тихому разбираюсь не спеша. Спасибо за понимание, надеюсь поможете.

В общем виде можно сделать так:
<code>
var0_1 = 0 # Sum
counter = 0 # инициализируем наш счетчик
print('Enter numbers (up to 10 values inclusive):')
while counter < 10: # проверяем, что счетчик вводов не больше 10
                    # (счетчик начинается с 0)
    var0_1 += int(input())  # сразу прибавляем ввод к сумме
    counter+=1              # увеличиваем значение счетчика

print('Sum: ', var0_1)
</code>


Помогите (объясните) [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

 Учебные задания допустимы в качестве вопросов только при условии, что вы пытались решить их самостоятельно перед тем, как задать вопрос. Пожалуйста, отредактируйте вопрос и укажите, что именно вызвало у вас трудности при решении задачи. Например, приведите код, который вы написали, пытаясь решить задачу

Закрыт 1 год назад.

                        Улучшить вопрос

Нужно решить задачу:
Даны 3 числа. Определить отношение меньшего из них к большему.
(написать на python)

Предлагаю такое решение:

a, b, c = int(input()), int(input()), int(input())
max_number, min_number = max(a, b, c), min(a, b, c)
result = min_number / max_number

В переменной
result будет нужное вам отношение.


Вывести без квадратных скобок и кавычек
Я хочу чтобы конечный результат появлялся без квадратных скобок и кавычек
<code>
favorite_places = {
    'alex': ['usa', 'italy', 'korea'],
    'monroe': ['canada', 'france'],
    'sasha': ['japan'],
}
for name, place in favorite_places.items():
    print(f"{place}")
</code>

print(f"{place}")

print(", ".join(place))


Как заполнить построчно таблицу в Excel с помощью Python?
Основная суть вопроса: как занести несколько Dataframe в одну таблицу excel?
Программа берёт файл index.html и парсит его. При выводе в excel таблицу, значения переменной df записываются в одну строчку. Не получается сделать так, чтобы записывалась по-порядку 1 файл = 1 строка в excel. Данные после парсинга (переменной df) выглядят примерно так и они же заносятся в xlsx таблицу:

Show   id  detect
0      2   usbhub
0      2   wireless

Кто-нибудь знает возможно ли реализовать по строчное заполненине таблицы excel? Одна таблица равно 1 строка в excel. Кто знает, подскажите, пожалуйста, что я делаю не так. Если что не понятно, пишите

from bs4 import BeautifulSoup
import pandas as pd
from pandas import DataFrame
import os
from array import *
import openpyxl as ox

dir_viewer = os.listdir("/home/html/")
#print(dir_viewer)
for onedir in dir_viewer:
#Открывает файл для парсинга
    cur_path = "/home/html/"+str(onedir)+"/index.html"
    if os.path.exists(cur_path):
        with open(cur_path) as fp:
            soup = BeautifulSoup(fp, 'html.parser')
            fp = pd.read_html(cur_path, match="Detect")
            for record in fp:
                #print(record)
                #print('==================')
                df = pd.DataFrame(fp)
export_csv = df.to_excel(r'program_lang.xlsx', index=None, header=None)

Возможно Вы сможете адаптировать мою рабочую функцию под свои нужды.
<code>
import pandas as pd
import openpyxl as oxl

# пример словарь python
data = {"Company":"sony","Website":"sony.com","Country":"japan" }

def write_data():
 try:
    excel = pd.read_excel(r"E:\program_lang.xlsx", index_col=0)#открываем файл
    row = len(excel.index) + 2# ищем пустую ячейку в файле
    wb = oxl.load_workbook(r"E:\program_lang.xlsx")# загружаем существующий excel
    sheet = wb.active
    columns = ['A', 'B', 'C', 'D','N']# пишем нужные колонки excel для записи
    col = 0
    for k in data:
        sheet[columns[col] + str(row)] = str(data[k])
        col = col + 1
    wb.save(r"E:\program_lang.xlsx")
  except PermissionError:
    print('--- Oшибка! Вы забыли закрыть excel фаил ---' )
</code>


Найти элемент в списке по слову
Есть список:
<code>
spisok = ['колбаса=1', 'мясо=2', 'суп=3']
</code>
Нужно узнать, в каком элементе списка spisok есть слово 'мясо'. А потом нужно чтобы переменная element была равна числу, стоящее после знака '=' элемента, который мы только что нашли(в котором есть слово 'мясо'.

Советую пользоваться не списком, а словарём.

spisok = {'колбаса': 1, 'мясо': 2, 'суп': 3}

Тогда можно обратиться к ключу, например
spisok['мясо'] выдаст 2.
В вашем случае со списком можно разве что так. Предположим, что нам надо найти "мясо".

spisok = ['колбаса=1', 'мясо=2', 'суп=3']
for i in spisok:
    text = i.split('=')
    if text[0] == 'мясо':
        number = text[1]

То есть делим по символу "=" и проверяем.


Библиотеки для работы с таблицами Excel для Python [закрыт]

Закрыт. Данный вопрос необходимо конкретизировать. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.

Закрыт 1 год назад.

                        Улучшить вопрос

Подскажите, существуют ли библиотеки для форматирования таблиц в excel (Ввод данных, заливка ячеек и т.)

Pandas, openpixel, XlsxWriter. Все библиотеки разные и под разные задачи. Нужно по отдельности смотреть, что конкретно Вам нужно


Изменить каждый четвёртый элемент на строку
Мне нужна ваша помощь. У меня есть список элементов. Мне нужно каждый четвертый элемент сменить на 'X'. Мне удалось изменить только первый элемент, но я не знаю как изменить все, которые подпадают под каждый четвертый. Помогите: как мне изменить каждый четвертый элемент на 'X' и вывести полный список с измененными элементами? Спасибо вам большое
<code>
list_of_numbers_two = [22,3,5,2,8,2,-23,8,23,5]
x_items = [str(item) for item in list_of_numbers_two[::4]]
x_items[0::] = 'X'
print(x_items)
</code>

for index, i in enumerate(list_of_numbers_two):
    if index == 0: continue
    if index % 4 == 0:
        list_of_numbers_two[index] = "X"


Django логгирование для файла и консоли
Есть рабочий
django проект, который имеет следующую конфигурацию для логгирования (
settings.py)

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'logfile': {
            'class': 'logging.FileHandler',
            'filename': 'server.log',
        },
        'console':{
            'class':'logging.StreamHandler'
        }
    },
    'loggers': {
        'django': {
            'handlers': ['console', 'logfile'],
        },
    },
}

Все отлично работает и логи пишутся.
Иногда есть необходимость заходить в командную строку
django через
manage.py, вот так

(env) a@prod:~/path_to_manage$ python3 manage.py shell

На данном этапе получаю ошибку

raise ValueError('Unable to configure handler '
ValueError: Unable to configure handler 'logfile'

Мне объективно понятно, что в этом случае, я не могу получить доступ к файлу
server.log. То есть, если заглянуть в логи, то я это вижу

PermissionError: [Errno 13] Permission denied: '/home/path_to_project/server.log'

Кто знает как настроить конфиг, чтобы не было этого поведения. То есть, для того чтобы зайти сейчас в консоль
django, мне необходимо закомментить
LOGGING в настройках и тогда все работает, ошибки не получаю, но и логи (что логично) не пишутся.

В действительности, все было ясно из самого вопроса. Проверил кто владелец файла и группу и все встало на свои места. Поскольку разворачивал не я не сервере, мне остается только догадываться как такое получилось.
В общем:

Проверил права доступа

ls -l server.log

Вывод

-rw-r--r-- 1 root   root    55602 nov.  26 12:11 server.log

И переопределил пользователя

sudo chown site_user:site_user server.log

Раскоментил
LOGGING в
settings.py и запустил

python3 manage.py shell

И ожидаемый вывод

Python 3.8.10 (default, Nov 26 2021, 20:14:08)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)


Правильный синтаксис присваивания переменной
Необходимо обновленную таблицу присвоить новой переменной. Можно в одну строку, а как сделать, чтобы было в несколько строк. В скобках
calls также выдает ошибку.

calls =
(
    df_calls
    .groupby(['user_id', 'month'])
    ['duration']
    .agg(['count', 'sum'])
    .reset_index()
)

Правило такое: Когда разделить команду на 2 или более строк, надо Питон предупредить, что команда еще не завершилась и будет продолжаться на следующей строке:

знаком
\ как последним в текущей строке,
но этого не надо сделать когда продолжение строки следует неявно

из отсутствия (пока) заключающей (т.е. правой) круглой скобки,
из отсутствия (пока) заключающей (т.е. правой) квадратной скобки,
из отсутствия (пока) заключающей (т.е. правой) фигурной скобки.

Пример:

calls = (
    df_calls
    .groupby(['user_id', 'month'])
    ['duration']
    .agg(['count', 'sum'])
    .reset_index()
    )

Не надо (но возможно) писать ни одного
\, потому что всё время ждется правая круглая скобка - к первой левой скобке в первой строке.

См. рекомендацию

Предпочтительный способ переноса длинных строк является использование подразумеваемых продолжений строк Python внутри круглых, квадратных и фигурных скобок. Длинные строки могут быть разбиты на несколько строк, обернутые в скобки. Это предпочтительнее использования обратной косой черты для продолжения строки.

в части Максимальная длина строки в документе PEP 8 - руководство по написанию кода на Python.


Как работает fromkeys python?
Разбираю я одну задачу в python, а именно удаление дубликатов из списка. Решение словно я нашел, однако не могу разобраться, как оно работает. Можете объяснить данный код, правильно я понимаю, что списки в python не могут иметь дубликатов и метод
fromkeys автоматически удаляет дубликаты?

list_of_numbers = [22, 3,5,2,8,2,-23, 8,23,5]
list_of_numbers = list(dict.fromkeys(list_of_numbers))
print(list_of_numbers)

Списки могут иметь дубликаты. А вот словари не могут. Эту особенность словарей Вы и используете для удаления дубликатов.

fromkeys — это не просто метод, это метод класса. Он принимает итерируемый объект, содержащий ключи, и возвращает новый объект словаря. То есть после его вызова Вы получите:

{22: None, 3: None, 5: None, 2: None, 8: None, -23: None, 23: None}

Так как это уже словарь, дубликатов в нём нет. И Вы преобразуете его обратно в список (через конструктор
list). В качестве элементов списка будут использованы ключи словаря:

[22, 3, 5, 2, 8, -23, 23]

Кстати, дубликатов также не имеет множество (
set), поэтому можно упростить Ваш код так:

list_of_numbers = [*{*list_of_numbers}]  # list(set(list_of_numbers))


Обработка исключений или решение проблем с Python socket
У меня есть сокет сервер на pyhon3 с некой секьюрностью из-за гуляющих ботов которые стучатся во все открытые порты
Скрипт работает исправно, только вот из-за Dos падает с ошибкой
Код ошибки:

During handling of the above exception, another exception occurred:

Traceback (most recent call last):   File "SM_803GIT.py", line 94, in <module>
    start_my_server()   File "SM_803GIT.py", line 79, in start_my_server
    load_secret(secret_token, data)   File "SM_803GIT.py", line 43, in load_secret
    accept(key)   File "SM_803GIT.py", line 49, in accept
    try_to_verification(key)   File "SM_803GIT.py", line 60, in try_to_verification
    next_step()   File "SM_803GIT.py", line 89, in next_step
    start_my_server()   File "SM_803GIT.py", line 79, in start_my_server
    load_secret(secret_token, data)   File "SM_803GIT.py", line 43, in load_secret
    accept(key)   File "SM_803GIT.py", line 49, in accept
    try_to_verification(key)   File "SM_803GIT.py", line 60, in try_to_verification
    next_step()   File "SM_803GIT.py", line 89, in next_step
    start_my_server()   File "SM_803GIT.py", line 79, in start_my_server
    load_secret(secret_token, data)   File "SM_803GIT.py", line 43, in load_secret
    accept(key)   File "SM_803GIT.py", line 49, in accept
    try_to_verification(key)   File "SM_803GIT.py", line 60, in try_to_verification
    next_step()   File "SM_803GIT.py", line 89, in next_step
    start_my_server()   File "SM_803GIT.py", line 79, in start_my_server
    load_secret(secret_token, data)   File "SM_803GIT.py", line 43, in load_secret
    accept(key)   File "SM_803GIT.py", line 49, in accept
    try_to_verification(key)   File "SM_803GIT.py", line 60, in try_to_verification
    next_step()   File "SM_803GIT.py", line 89, in next_step
    start_my_server()   File "SM_803GIT.py", line 79, in start_my_server
    load_secret(secret_token, data)   File "SM_803GIT.py", line 43, in load_secret
    accept(key)   File "SM_803GIT.py", line 49, in accept
    try_to_verification(key)   File "SM_803GIT.py", line 60, in try_to_verification
    next_step()   File "SM_803GIT.py", line 89, in next_step
    start_my_server()   File "SM_803GIT.py", line 79, in start_my_server
    load_secret(secret_token, data)   File "SM_803GIT.py", line 43, in load_secret
    accept(key)   File "SM_803GIT.py", line 49, in accept
    try_to_verification(key)   File "SM_803GIT.py", line 60, in try_to_verification
    next_step()   File "SM_803GIT.py", line 89, in next_step
    start_my_server()   File "SM_803GIT.py", line 79, in start_my_server
    load_secret(secret_token, data)   File "SM_803GIT.py", line 43, in load_secret
    accept(key)   File "SM_803GIT.py", line 49, in accept
    try_to_verification(key)   File "SM_803GIT.py", line 60, in try_to_verification
    next_step()   File "SM_803GIT.py", line 89, in next_step
    start_my_server()   File "SM_803GIT.py", line 79, in start_my_server
    load_secret(secret_token, data)   File "SM_803GIT.py", line 43, in load_secret
    accept(key)   File "SM_803GIT.py", line 49, in accept
    try_to_verification(key)   File "SM_803GIT.py", line 60, in try_to_verification
    next_step()   File "SM_803GIT.py", line 89, in next_step
    start_my_server()   File "SM_803GIT.py", line 81, in start_my_server
    start_my_server()   File "SM_803GIT.py", line 76, in start_my_server
    data = client_socket.recv(1048576).decode('utf-8') UnicodeDecodeError: 'utf-8' codec can't decode byte 0xee in position 4: invalid continuation byte

Как мне обработать такие случаи или попросту пропускать большое кол-во запросов от одного ip
Пример кода:

import os
import socket
from pathlib import Path
from dotenv import load_dotenv
import json
import time
import re

#Init .env
env_path = Path('.') / '.env'
load_dotenv(dotenv_path=env_path)

#init
secret_token = os.environ['secret_token']

#time
seconds = time.time()
local_time = time.ctime(seconds)

#HDRS
HDRS = 'HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\n\r\n'
HDRS_404 = 'HTTP/1.1 404 OK\r\nContent-Type: text/html; charset=utf-8\r\n\r\n'

socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket_server.bind(('ip', port))
socket_server.listen(32768)
#create webserver socket
def start_my_server():
    # print('Working...')
    # client_socket, address = socket_server.accept()
    # print('loop', address)
    #
    # data = client_socket.recv(1048576).decode('utf-8')
    def load_secret(secret_token, data):
        key = str(data)
        key = re.findall(f'X-Gitlab-Token:.............', key)
        key = str(key).replace("['X-Gitlab-Token: ",'')
        key = str(key).replace("']", '')
        # print(key, 'load_secret')
        # print(secret_token, 'load_secret')
        if secret_token == key:
            accept(key)
        else:
            fail_verifivcation()
        # return key
    def accept(key):
        print('Find')
        try_to_verification(key)

    def try_to_verification(key):
        print(key, 'key try_to_verification')
        # print(data,'\n', client_socket,'\n', address,'\n', 'ПРОВЕРКА')
        with open(f'data("{local_time}").json', 'w') as output_file:
            json.dump(data, output_file)
        client_socket.send(HDRS.encode('utf-8'))
        client_socket.shutdown(socket.SHUT_WR)
        # socket_server.close()
        # return init_next()
        next_step()
    def fail_verifivcation():
        print('Not find')
        client_socket.shutdown(socket.SHUT_WR)
        addresses = open('ipPOST', 'a')
        addresses.write(str(address) + f'{local_time}\n')
        addresses.close()
        # init_next()
    try:
        while True:
            print('Working...')
            client_socket, address = socket_server.accept()
            print('loop', address)
            addresses = open('ipPOST', 'a')
            addresses.write(str(address) + f'{local_time}\n')
            # addresses.close()
            data = client_socket.recv(1048576).decode('utf-8')
            # content = load_page_from_get_request(data)
            # return data, client_socket, address
            load_secret(secret_token, data)
    except socket.error:
        start_my_server()
    # load_secret(secret_token, data)
    # init_next()
    # return init_next()

def next_step():
    print('next step')
    # return  init_next()
    start_my_server()

print('loop script')
if __name__ == '__main__':
    print('name = main')
    start_my_server()
    # load_secret()
    next_step()

Сейчас мой код выглядит так, спасибо @Mike за помощь
Осталось решить вопросы с соединением пакетов и #отключением канала по таймауту
<code>
    import os
    import socket
    from pathlib import Path
    from dotenv import load_dotenv
    import json
    import time
    import re

    # Init .env
    env_path = Path('.') / '.env'
    load_dotenv(dotenv_path=env_path)

    # init
    secret_token = os.environ['secret_token']

    # time
    seconds = time.time()
    local_time = time.ctime(seconds)

    # HDRS
    HDRS = 'HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\n\r\n'
    HDRS_404 = 'HTTP/1.1 404 OK\r\nContent-Type: text/html; charset=utf-8\r\n\r\n'

    socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    socket_server.bind((ip, port))
    socket_server.listen(32768)
    socket_server.settimeout(4)

    # create webserver socket
    def start_my_server():
        def load_secret(secret_token, data):
            key = str(data)
            key = re.findall(f'X-Gitlab-Token:.............', key)
            key = str(key).replace("['X-Gitlab-Token: ", '')
            key = str(key).replace("']", '')
            if secret_token == key:
                socket_server.settimeout(None)
                accept(key)
            else:
                fail_verifivcation()
            # return key

        def accept(key):
            print('Find')
            try_to_verification(key)

        def try_to_verification(key):
            print(key, 'key try_to_verification')
            with open(f'data("{local_time}").json', 'w') as output_file:
                json.dump(data, output_file)
            client_socket.send(HDRS.encode('utf-8'))
            client_socket.shutdown(socket.SHUT_WR)
            next_step()

        def fail_verifivcation():
            print('Not find')
            client_socket.shutdown(socket.SHUT_WR)
            addresses = open('ipPOST', 'a')
            addresses.write(str(address) + f'{local_time}\n')
            addresses.close()
            # init_next()
        while True:
            try:
                while True:
                    print('Working...')
                    client_socket, address = socket_server.accept()
                    print('loop', address)
                    try:
                        data = client_socket.recv(1048576).decode('utf-8')
                        load_secret(secret_token, data)
                    except UnicodeDecodeError:
                        fail_verifivcation()
                    # content = load_page_from_get_request(data)
                    # return data, client_socket, address
                    # load_secret(secret_token, data)
            except socket.error:
                pass

    def next_step():
        print('next step')
        # start_my_server()

    print('loop script')
    if __name__ == '__main__':
        print('name = main')
        start_my_server()
        # load_secret()
        next_step()
</code>


[ErrorDetail(string='Invalid pk "37" - object does not exist.', code='does_not_exist')]
<code>
def resave_road_2(self, road_obj, new_hw):
    for new_obj in new_hw:
        if new_obj.data["road"] is not None:
            print(new_obj.data)
</code>
У меня есть эта функция где нужно показать только те объекты где  road не пустой. Однако мне программа  отправляет ошибку

{'road': [ErrorDetail(string='Invalid pk "56" - object does not exist.', code='does_not_exist')]}

По такому pk "56" в базе нет объекта
Как можно это исправить?

Используй try - except. Дальше сам обработай исключение как тебе нужно
<code>
def resave_road_2(self, road_obj, new_hw):
     try:
        for new_obj in new_hw:
            if new_obj.data["road"] is not None:
                print(new_obj.data)
     except Exception as ex:
        print(f"Ошибка: {ex}")
</code>


python. Очистка строки от гиперссылок и тэгов
Дана строка вида:

<img src="картинка.png" /><br />
<br />
15 апреля 1999 года Вася полностью <a href="ссылка1" rel="nofollow noopener noreferrer">приостановил</a>
все функции создания колбасы для деревни, включая подписку premium colbas. <br />
<a href="ссылка2">Читать дальше &rarr;</a>

Необходимо удалить все теги и гиперссылки из текста, оставив только содержание.
Должно получится:

15 апреля 1999 года Вася полностью приостановил все функции создания колбасы для деревни, включая подписку premium colbas. Читать дальше

Подскажите, в какую сторону двигаться, для того, чтобы определять теги и промежуточную в них информацию для её удаления, или, например, изъятия самой ссылки внутри тэга (допустим изъятие "ссылка2" под текстом "читать дальше")

import re
from html import unescape

text = """<img src="картинка.png" /><br />
<br />
15 апреля 1999 года Вася полностью <a href="ссылка1" rel="nofollow noopener noreferrer">приостановил</a>
все функции создания колбасы для деревни, включая подписку premium colbas. <br />
<a href="ссылка2">Читать дальше &rarr;</a>"""

t = unescape(re.sub(r'<.+?>', '',  re.sub(r'<a.+?>(.+?)</a>', r'\1', text)).strip())
print(t)

Output

15 апреля 1999 года Вася полностью приостановил
все функции создания колбасы для деревни, включая подписку premium colbas.
Читать дальше →


Не работает операция остатка от 10**9+7(1000000007)
У меня есть код, находящий количество сочетаний (n,k). В результате мне нужно будет вернуть остаток числа от (10**9+7). Я решил ускорить программу, и добавить операцию остатка в функцию, получился вот такой код:
<code>
def combination(n, k):
    if 0 <= k <= n:
        m = 10**9+7
        nn = 1
        kk = 1
        for t in range(1, min(k, n - k) + 1):
            nn = (nn * n) % m
            kk = (kk * t) % m
            n -= 1
        return nn // kk
    else:
        return 0
</code>
Но по непонятной мне причине,  деление с остатком в функции  не происходит и на выходе выдается огромное число. В чем проблема?

Взятие по модулю нельзя проносить через деление:
(a // b) % m != (a % m) // (b % m). Через сложение, вычитание и умножение можно, а через деление нельзя.
Пример для
Cnk(9, 4) mod 19:

Cnk(9, 4) = (9 * 8 * 7 * 6) / (1 * 2 * 3 * 4) = 3024 / 24 = 126
Cnk(9, 4) % 19 = 12

(9 * 8 * 7 * 6) % 19 = 3024 % 19 = 3
(1 * 2 * 3 * 4) % 19 = 24 % 19 = 5
3 // 5 = 0

12 != 0

P.S. Для факториала особенно просто считается разложение на простые. На трёх разложениях дробь сокращается, затем считается произведение по модулю.
P.P.S. Расширенный алгоритм Евклида вычисляет обратное число по модулю. Его тоже часто используют для решения этой задачи - деление заменяется на умножение на обратный, а умножения делаются по модулю.


Сравнение введённого слова и слова в файле
Есть файл в нём три слова:

help

hi

hell
введены через ряд каждое.
Когда я сравниваю введённое пользователем слово со словом в файле, то на первом срабатывает, а второе как будто игнорируется
Код python:

with open('yarin.txt', 'r', encoding="utf-8") as r:
    x = r.readlines()
    n = input("Name:")
    i = 0
    da = 'yes'
    ne = 'no'
    read = x[i].strip()
    while read != n:
        i += 1
        if i == 10:
            print(ne)
            break
        else:
            pass
    else:
        if read == n:
           print(da)
        else:
            pass

Перед циклом ты ставишь
read как первую строку, а в самом цикле не обновляешь переменную (
i меняется, но
read нет)


Слить два списка [закрыт]

Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

Закрыт 1 год назад.

                        Улучшить вопрос

Как слить два списка a b чтобы получить c?

a = [1,2,6] b = [3,4,5,7,9]

с = [1,2,-3,-4,-5,6,-7,-9]

В одну строчку:
<code>
print(sorted(a + [-x for x in b], key=abs))
</code>


Сравнение двух текстовых файлов с последующим выведением совпадений (Python)
Приветствую сообщество stackoverflow. Есть два текстовых файла ('file.txt', 'file2.txt'), нужно провести сравнение и вывести совпадение. Я тут набросал работающий вариант, и мне в нем нравиться, что вывод игнорирует если строка в одном из файлов начинается с пробела или какой-либо вступительной фразы - выводит только совпадения. Однако есть и недостаток указал их #так.

        with open(file.txt) as file1:
            for line in file1:
                filelist1 = line.split()
                with open(file2.txt) as file2:
                    for line in file2:
                        filelist2 = line.split()
                            resoult = list(set(filelist1) & set(filelist2))
                            if resoult == []:  #(осторожно наколхозил) вот тут мне не нравиться, если не использовать эту команду при выводе совпадений из текстовых файлов будет множество пустых списков'''
                                continue
                            else:
                                print(resoult, end='\n')

Хотелось бы сюда вставить что-то вроде if/else в плане: если вывод пустой - написать пользователю, что совпадения не найдены; если же 'len(resoult) > 0' - поздравить с найденными совпадениями. Но сделать это с помощью данного кода не представляется возможности.
Пример.
file.txt:

груша
яблоко апельсин
арбуз и дыня

file2.txt:

манго малина яблоко
 дыня

Мой вывод:

['яблоко']
['дыня']

Желаемый вывод:

Ваши найденные совпадения:
яблоко
дыня

Очень хотелось бы посмотреть, как с этой простой задачей справиться более лаконично и правильно. Заранее прошу прощения за глупость и большое спасибо за Ваши ответы!

Код не сильно красивый, но вот наипростейший способ найти пересечение множеств:

f = open('file.txt', 'r', encoding='utf-8')
lines1 = set(f.read().split())
f.close()
f = open('file2.txt', 'r', encoding='utf-8')
lines2 = set(f.read().split())
f.close()

print(lines1)
print(lines2)

print(lines1.intersection(lines2))

Вывод:

{'груша', 'арбуз', 'апельсин', 'и', 'яблока', 'дыня'}
{'дыня', 'манго', 'яблоко', 'малина'}
{'дыня'}

Заметим, что из представленного набора данных слова "яблока" и "яблоко" - разные, поэтому не вывелись.
Чтобы сделать возможным вывод сообщений "найдены" или "не найдены" совпадения, то добавим простую проверку:

f = open('file.txt', 'r', encoding='utf-8')
lines1 = set(f.read().split())
f.close()
f = open('file2.txt', 'r', encoding='utf-8')
lines2 = set(f.read().split())
f.close()

print('Первое множество:', lines1)
print('Второе множество:', lines2)

intersection = lines1.intersection(lines2)

if len(intersection) > 0:
    print('Совпадения найдены:', intersection)
else:
    print('Совпадения не найдены')

Вывод:

Первое множество: {'груша', 'яблока', 'арбуз', 'дыня', 'апельсин', 'и'}
Второе множество: {'малина', 'яблоко', 'манго', 'дыня'}
Совпадения найдены: {'дыня'}


Как перенести данные из одной таблицы в другую? sqlite
У меня есть две таблицы:
<code>
# Активные задачи
cur.execute("""CREATE TABLE IF NOT EXISTS taskActive(
    ID TEXT,
    name TEXT,
    description TEXT,
    time TEXT
)""")
con.commit()

# Завершённые задачи
cur.execute("""CREATE TABLE IF NOT EXISTS taskDeleted(
    ID TEXT,
    name TEXT,
    description TEXT,
    time TEXT,
    timeDeleted TEXT
)""")
con.commit()
</code>
Как перенести данные из одной таблицы(например из taskActive) в другую(в taskDeleted)?

Я бы рекомендовал хранить все задачи в одной таблице:

CREATE TABLE IF NOT EXISTS task(
    ID TEXT,
    name TEXT,
    description TEXT,
    time TEXT,
    timeDeleted TEXT,
    status TEXT
)

Где, статус может иметь значения
Active или
Deleted
Тогда, например, для выборки активных задач будет такое условие:

select * from task where status = 'Active'


Как проверить наличие роли у юзера в discord.py?
Я делаю бота для одной игры в дискорде. Мне нужно чтобы если у юзера забирали роль то тогда выполнялся какой-то код, в моём случае
config.players = config.players - 1
Код:

@bot.event
async def ...(member):
  config.players = config.players - 1
  channel = ds.utils.get(user.guild.channels, id=950329905512595466)
  await channel.send(f'**{member}** вышел **{config.players}/10')

Каким методом в
discord.py это можно осуществить?

Для подобных манипуляций в
discord-py есть специальное событие
on_member_update()

@bot.event
async def on_member_update(before, after):
    . . .

Функция будет вызываться при изменении данных (никнейм, роли и т.д.) любого участника сервера.
Аргумент
before - это класс
discord.Member с набором свойств, которые были до обновления данных пользователя
Аргумент
after - тоже самое, что и
before, но, соответственно, с актуальными данными

Далее просто проверьте есть ли у
after необходимая роль И была ли она у
before, так как нужно понять, что данное изменение - это именно удаление роли у пользователя.

@bot.event
async def on_member_update(before, after):
    role = discord.utils.get(before.guild.roles, id=763333777266049024)

    # если такая роль была у пользователя И ее нет у него сейчас
    if role in before.roles and role not in after.roles:
        print(f'У {after.name} пропала роль {role.id}')

Для работы с
discord.Member должны быть включены и выданы discord.Intents


Сравнение вводимого слова с файлом
У меня в файле есть слово
example. Нужно сделать так, чтобы после того, как пользователь вводит слово, оно сравнивалось со словом в файле. Если правильно, вывести
1, если нет -
0.
Мой код выводит всегда
0. Надеюсь на помощь.
Вот код:

rd = open('admin.txt', 'r')

nick = input('Введите имя:')
x = rd.readlines()
name = x[0]
print(name + nick)
if name == nick:
    print(1)
else:
    print(0)

rd.close()

Потому что в
name есть символ перевода строки, а в
nick его нет. Избавиться от него можно так

name = x[0].strip()


Как разделить строку на подстроки?
У меня есть вот такая СТРОКА:
{'4000000000111':'Бумага А4', '4000000002111':'OIL GEL PEN (Sigma)', '4000000003111':'Календарь для кармана'}
Мне нужно ее изменить до следующего вида:

4000000000111 Бумага А4
4000000002111 OIL GEL PEN (Sigma)
4000000003111 Календарь для кармана

Я написала вот такой код:

k="{'4000000000111':'Бумага А4', '4000000002111':'OIL GEL PEN (Sigma)',
'4000000003111':'Календарь для кармана'}"
l = []

for i in k:
   l.append(i)#здесь я разделяла это на отдельные элементы'{', "'", '4', '0', '0', '0'...

l1 = []
for j in l:
   if j in "'{},":
      del j
   else:
      l1.append(j)#здесь удаляла ненужное и добавляла в список['4', '0', '0', '0', '0',

new = ''.join(l1)
#здесь получила вот такое 4000000000111:Бумага А4
m = []
v = new.split()
for h in v:
   m.append(h.replace(':', ' '))
print(*m)#здесь заменяла : на пробел

Я получила вот такое:
4000000000111 Бумага А4 4000000002111 OIL GEL PEN (Sigma) 4000000003111 Календарь для кармана
Я пробовала писать в конце print(*m, sep ='\n'), но я не получала желаемого результата
Как разбить эту строчку на подстроки?

Полагаю, что более правильным решением будет работать с JSON через встроенный пакет.
<code>
import json
data_str = "{'4000000000111':'Бумага А4', '4000000002111':'OIL GEL PEN (Sigma)', '4000000003111':'Календарь для кармана'}".replace("'", '"')
# здесь пришлось заменить с помощью метода replace одинарные кавычки на двойные, потому что так требует формат JSON'а

data = json.loads(data_str) # так мы парсим строку, в итоге получаем dict.

for k in data: # в цикле перебираются ключи из dict'а
    print(k, data[k]) # выводим пары ключ и значение
</code>


Как в Django добавить несколько фотографий в одну модель?
Видел этот вопрос на  форуме ранее, но решение не помогло. Хочу добавить несколько фотографий к товару, как это можно сделать почти во всех интернет-магазинах
<code>
 image = models.ImageField(blank = True)
 image1 = models.ImageField(blank = True)
 image2 = models.ImageField(blank = True)
 image3 = models.ImageField(blank = True)
</code>
Но я хочу сделать по-нормальному.
Я искал разные решения в интернете, но пока ничего не выходит. Хочется, чтобы при добавлении товара (пока что через стандартную админ панель, потом добавлю форму) можно было загрузить значения всех моих панелей (уже есть) и столько фотографий, сколько хочет пользователь.

Можешь создать ещё одну модель с полями: товар и фото.
Поле товар связываешь с моделью товара.
И можешь добавлять не ограниченное кол-во фото для товара.

class Photo(models.Model): product = models.ForeignKey('имя модели продукта', on_delete=models.CASCADE) image = models.ImageField(blank = True)


Как вывести в столбик информацию из таблицы SQL
У меня есть таблица. В ней есть список, а в нём 3 кортежа. Мне нужно сделать так, чтобы каждый кортеж выводился таблицей. То есть вывод который я получаю:

[('79354', 'Текст', 'Ещё текст', 'Tue Mar  8 21:52:42 2022'), ('91681', 'Текст1', 'Ещё текст1', 'Tue Mar  8 21:54:36 2022'), ('12149', 'Текст2 ', 'Ещё текст2', 'Tue Mar  8 21:55:05 2022')]

Но вот текст, который я хочу получить:

[('79354', 'Текст', 'Ещё текст', 'Tue Mar  8 21:52:42 2022'),

('91681', 'Текст1', 'Ещё текст1', 'Tue Mar  8 21:54:36 2022'),

('12149', 'Текст2 ', 'Ещё текст2', 'Tue Mar  8 21:55:05 2022')]

Вот функция, вызывающая вывод таблицы:
<code>
def Total():
    global cur

    Total = cur.execute("SELECT * FROM taskActive").fetchall()
    print(Total)
    StartMenu()
</code>

* это так называемая распаковка итерируемого объекта
Тоесть при

a = ['a', 'b', 'c']

Запись

print(*a)

Будет эквивалентна записи

print(a[0], a[1], a[2])

Кроме того:

a = ['0', '1', '2']

b = [*map(int, a)]
# Будет эквивалентна записи
b = list(map(int, a))


Как создать датафрейм
Как создать dataframe
res из
a, если каждый [ ] в
a это столбец с названием 1,2,3 (но может быть и больше), а кол-во строк 40. Пропуски заполнены np.nan, к примеру значение 25 должно лежать по индексу 24. 15 на индексе 14, если 7 то на 6 и тп.

a = [ [7, 25, 29], [1, 14, 15, 27], [0, 10, 15] ]

Можно попробовать так:

import pandas as pd

a = [ [7, 25, 29], [1, 14, 15, 27], [0, 10, 15] ]
n = 40

res = pd.DataFrame(index=list(range(0,n)))
for i in range(len(a)):
    res = res.join(pd.DataFrame(a[i], index=[x-1 for x in a[i]], columns=[i+1]))

res:

       1     2     3
0    NaN   1.0   NaN
1    NaN   NaN   NaN
2    NaN   NaN   NaN
3    NaN   NaN   NaN
4    NaN   NaN   NaN
5    NaN   NaN   NaN
6    7.0   NaN   NaN
7    NaN   NaN   NaN
8    NaN   NaN   NaN
9    NaN   NaN  10.0
10   NaN   NaN   NaN
11   NaN   NaN   NaN
12   NaN   NaN   NaN
13   NaN  14.0   NaN
14   NaN  15.0  15.0
15   NaN   NaN   NaN
16   NaN   NaN   NaN
17   NaN   NaN   NaN
18   NaN   NaN   NaN
19   NaN   NaN   NaN
20   NaN   NaN   NaN
21   NaN   NaN   NaN
22   NaN   NaN   NaN
23   NaN   NaN   NaN
24  25.0   NaN   NaN
25   NaN   NaN   NaN
26   NaN  27.0   NaN
27   NaN   NaN   NaN
28  29.0   NaN   NaN
29   NaN   NaN   NaN
30   NaN   NaN   NaN
31   NaN   NaN   NaN
32   NaN   NaN   NaN
33   NaN   NaN   NaN
34   NaN   NaN   NaN
35   NaN   NaN   NaN
36   NaN   NaN   NaN
37   NaN   NaN   NaN
38   NaN   NaN   NaN
39   NaN   NaN   NaN


Как сделать кликер в телеграмм боте?
я использую python и pyTelegramBotAPI(telebot)
Подскажите пожалуйста как можно сделать кликер в телеграмм боте, что при нажатии кнопки и(или) при вводе сообщения увеличивался счёт пользователя, главное что бы он сохранял результат

Не уверен, что кликер в телеграмме как-либо реализуем. При каждом клике сервер должен его обрабатывать, а учитывая что пользователь бота будет не один, это колоссальная нагрузка на сервер


Django заполнение базы данных из json файла (начальные данные)
Подскажите, есть, ли, готовые решения для заполнения базы данных из
json-файла.
Класс модели выглядит вот так

class ServiceForEnd(models.Model):
    name = models.CharField(max_length=50, unique=True)
    url = models.CharField(max_length=100, unique=True, primary_key=True)
    methods = models.CharField(max_length=100)
    id_request = models.BooleanField(default=False)
    oData = models.BooleanField(default=False)
    id_obligatory = models.BooleanField(default=False)

содержание
json:

[
    {
        "name": "ReportingTrialBalance",
        "url": "Reporting/TrialBalance/",
        "methods": "GET",
        "id_request": false,
        "oData": true,
        "id_obligatory": false
    },
    {
        "name": "BankTransfer",
        "url": "Bank/BankTransfer/",
        "methods": "GET, POST, DELETE",
        "id_request": true,
        "oData": true,
        "id_obligatory": false
    }
]

да, можно написать комманду под
manage.py
Для этого понадобится
BaseCommand
Ниже пример кода для заполнения таблиц
Genre и
Subgenre моего проекта
Сам файл находится по пути:

├───books_website
│   ├───books
│   │   ├───management
│   │   │   ├───commands
│   │   │   │   │
│   │   │   │   │─── load_data.py

from itertools import count
from django.core.management.base import BaseCommand
import json
from books.models import Genre, SubGenre

class Command(BaseCommand):
    def handle(self, *args, **options):

        with open('books.json', 'rb') as f:
            data = json.load(f)

            for i in data:
                print(i)
                genre = Genre()
                genre.name = i
                genre.save()

                g = Genre.objects.values('id').get(name = i)['id']
                for j in data.get(i):
                    s = SubGenre()
                    s.name = j
                    s.save()
                    s.genres.add(g)
        print('finished')

Запуск через:

python manage.py load_data


Echo to all bot
У меня есть echo bot на телеграм.
Его код:
<code>
import config
import telebot

bot = telebot.TeleBot(config.token)

@bot.message_handler(content_types=["text"])
def repeat_all_messages(message): # Название функции не играет никакой роли
    bot.send_message(message.chat.id, message.text)

if __name__ == '__main__':
     bot.infinity_polling()
</code>
Хотелось бы узнать, как сделать, чтобы все сообщения отправлялись всем пользователям. Этакий "анонимный глобальный чат"

Необходимо запомнить
chat.id всех пользователей, которые начинали чат с вашим ботом. Для этого в момент, когда пользователь начинает чат, сохраняем в свою БД. Если хранить данные в оперативной памяти, то они потеряются при первом же падении бота.
В момент, когда нужно разослать сообщение всем пользователям - достаём все
chat.id из базы данных и в цикле пробегаясь по ним отправляем:

for chat_id in chats_list:
  bot.send_message(chat_id, message.text)


Как в python выбрать дату из большого числа в каждой строке столбца из excel и записать результат по условию в соседний столбец excel?
Есть столбец в excel с номерами ИИН (в Казахстане), где первые 6 цифр - это зашифрованная дата рождения, а остальные цифры не важны совсем. Например, 760729000345 - это:1976-07-29 (1976 год июль (07) и 29 (дата)) или 961213789432 - это 1996-12-13. Остальные цифры не важны. Нужно из всего столбца (там больше 10 тыс записей) в питоне найти дни рождения и записать их в excel напротив ИИН в соседний столбец.
Плюс есть часть ИИН, которые юр.лица и там может быть 13 месяц или 65 число. Т.е. в этих строчках нужно поставить "ТОО" и не высчитывать дату.
Я не понимаю 2 вещи: как к каждой строчке в эксель средствами питона написать дату рождения и как это потом записать в сам эксель.
У меня получается: либо в эксель только последнее значение записывается, либо сначала одна дата рождения на все ИИН, потом вторая дата на все ИИН итд. Не понимаю, что делаю не так. Уже 3 неделю вожусь. Очень прошу помочь.
Я совсем начинающая в питоне. Прошу сильно не ругать и помочь, пожалуйста, по возможности. Никак не получается.
Вот мой код:

import pandas as pd # подгружаем библиотеку, чтобы работать с файлом
df = pd.read_excel(r"C:\Users\Oct-21\1.xlsx") # загружаем исходный файл
from datetime import date
import time
counter = 0
data_df = df['ИИН'].astype(pd.StringDtype())
for row in data_df:
   year = int(row[0:2])
   if  22 <= year <= 99:
       year += 1900
   else:
       year += 2000
   day = int(row[4:6])
   month = int(row[2:4])
   try:
       data=datetime.date(year,month,day)
       print(data)
   except:
       print("ТОО")
       counter +=1
print(counter)

Так код в питоне работает и все считает, но я не понимаю, как его в excel отправить, чтобы он был отдельным столбцом и в каждой строчке свое значение.
Если делаю вот так:

from datetime import date
import time
counter = 0
data_df = df['ИИН'].astype(pd.StringDtype())
c = data_df
for row in data_df:
    year = int(row[0:2])
    if  22 <= year <= 99:
        year += 1900
    else:
        year += 2000
    day = int(row[4:6])
    month = int(row[2:4])
    try:
        a = datetime.date(year,month,day)
        b = pd.Series(a)
        df['Дата'] = b
        print(df['Дата'])
    except:
        print("ТОО")
        counter +=1

то каждый раз перезаписывается именно первая строка.

Примеры ИИН (столбец из excel из которого берутся данные):

780913204527

Спасибо всем за помощь от всей души!
Всем любви и добра!


Как в discord.py проверять условие через промежуток времени
Мне нужно проверять условие каждые 30 секунд в discord.py. Как это сделать? Буду очень благодарен!

Как вариант, через
tasks
Вот пример кога:

class Tasks(commands.Cog):
    def __init__(self, bot: Bot):
        self.bot = bot
        self.update_message.start()

    def cog_unload(self):
        self.update_message.cancel()

    @tasks.loop(seconds=45)
    async def update_message(self):
        >>> condition

def setup(bot):
    bot.add_cog(Tasks(bot))


Python - файл не найден
При исполнении команды

file = open("C:\\Users\\Никита.Andrey\\AppData\\Local\\Temp\\TPWA\\win_a.cmd", "wb")

python выдает такую ошибку:

Traceback (most recent call last):
File "F:\Python\Project\YandexLuceum\windows_activate.py", line 24, in <module>
file = open("C:\\Users\\Никита.Andrey\\AppData\\Local\\Temp\\TPWA\\win_a.cmd", "wb")
FileNotFoundError: [Errno 2] No such file or directory:
'C:\\Users\\Никита.Andrey\\AppData\\Local\\Temp\\TPWA\\win_a.cmd'

Хотя "wb" должен сначала создать файл а потом уже его открывать

Хотя "wb" должен сначала создать файл а потом уже его открывать

Должен создавать файл но не директорию.
<code>
>>> open('adsfa','wb')
<_io.BufferedWriter name='adsfa'>
>>> open('folder/adsfa','wb')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'folder/adsfa'
</code>


Не сортируется список по параметру order в NumPy
Мне нужно отсортировать список данных по одному из значений. Когда я пытаюсь сортировать мелкие списки, все работает. В этом же коде он отказывается сортировать список и говорит мне: unknown field name: energy. Почему он здесь не работает? Все же вроде видно
Код:

import numpy as np

types = [('database number', float), ('short description', 'S50'), ('water', float),
         ('energy', float), ('protein', float), ('lipid', float), ('ash', float),
         ('carbohydrates', float), ('fiber', float), ('sugar', float),
         ('calcium', float), ('iron', float), ('magnesium', float),
         ('phosphorus', float), ('potassium', float), ('sodium', float),
         ('zinc', float), ('copper', float), ('manganese', float),
         ('selenium', float), ('vitamin C', float), ('thiamin', float),
         ('riboflavin', float), ('niacin', float), ('panto acid', float),
         ('vitamin B6', float), ('folate', float), ('folic acid', float),
         ('food folate', float), ('folate DFE', float), ('choline', float),
         ('vitamin B12', float), ('vitamin A IU', float), ('vitamin A RAE', float),
         ('retinol', float), ('alpha carotine', float), ('beta carotine', float),
         ('beta crypt', float), ('lycopene', float), ('lut+zea', float),
         ('vitamin E', float), ('vitamin D', float), ('vitamin D IU', float),
         ('vitamin K', float), ('FA sat', float), ('FA mono', float),
         ('FA poly', float), ('cholesterol', float), ('gm wt 1', float),
         ('gm wt desc 1', 'S50'), ('gm wt 2', float), ('gm wt desc 2', 'S50'),
         ('refuse pct', float)]
table = np.genfromtxt('ABBREV.csv', delimiter=';', dtype=types, names=True, encoding='utf8')
print(table[0])
print(np.sort(table, order='energy'))

Текст ошибки:

Traceback (most recent call last):
  File "C:\Users\EPIX\Desktop\Console\images\main.py", line 24, in <module>
    print(np.sort(table, order='energy'))
  <...>
ValueError: unknown field name: energy

По запросу CrazyElf -
print(table[0]) выводит следующее):

(1001., b'BUTTER.WITH SALT', 15.87, 717., 0.85, 81.11, 2.11, 0.06, 0., 0.06, 24., 0.02, 2., 24., 24., 643., 0.09, 0., 0., 1., 0., 0.005, 0.034, 0.042, 0.11, 0.003, 3., 0., 3., 3., 18.8, 0.17, 2499., 684., 671., 0., 158., 0., 0., 0., 2.32, 0., 0., 7., 51.368, 21.021, 3.043, 215., 5., b'"1 pat.  (1"" sq. 1/3"" high)"', 14.2, b'1 tbsp', 0.)

Файл .csv выглядит вот так:

NDB_No;Shrt_Desc;Water_(g);Energ_Kcal;Protein_(g);Lipid_Tot_(g);Ash_(g);Carbohydrt_(g);Fiber_TD_(g);Sugar_Tot_(g);Calcium_(mg);Iron_(mg);Magnesium_(mg);Phosphorus_(mg);Potassium_(mg);Sodium_(mg);Zinc_(mg);Copper_mg);Manganese_(mg);Selenium_(µg);Vit_C_(mg);Thiamin_(mg);Riboflavin_(mg);Niacin_(mg);Panto_Acid_mg);Vit_B6_(mg);Folate_Tot_(µg);Folic_Acid_(µg);Food_Folate_(µg);Folate_DFE_(µg);Choline_Tot_ (mg);Vit_B12_(µg);Vit_A_IU;Vit_A_RAE;Retinol_(µg);Alpha_Carot_(µg);Beta_Carot_(µg);Beta_Crypt_(µg);Lycopene_(µg);Lut+Zea_ (µg);Vit_E_(mg);Vit_D_µg;Vit_D_IU;Vit_K_(µg);FA_Sat_(g);FA_Mono_(g);FA_Poly_(g);Cholestrl_(mg);GmWt_1;GmWt_Desc1;GmWt_2;GmWt_Desc2;Refuse_Pct
01001;BUTTER.WITH SALT;15.87;717;0.85;81.11;2.11;0.06;0;0.06;24;0.02;2;24;24;643;0.09;0;0;1;0;0.005;0.034;0.042;0.11;0.003;3;0;3;3;18.8;0.17;2499;684;671;0;158;0;0;0;2.32;0;0;7;51.368;21.021;3.043;215;5;"1 pat.  (1"" sq. 1/3"" high)";14.2;1 tbsp;0
01002;BUTTER.WHIPPED.W/ SALT;16.72;718;0.49;78.3;1.62;2.87;0;0.06;23;0.05;1;24;41;583;0.05;0.01;0.001;0;0;0.007;0.064;0.022;0.097;0.008;4;0;4;4;18.8;0.07;2468;683;671;1;135;6;0;13;1.37;0;0;4.6;45.39;19.874;3.331;225;3.8;"1 pat.  (1"" sq. 1/3"" high)";9.4;1 tbsp;0
01003;BUTTER OIL.ANHYDROUS;0.24;876;0.28;99.48;0;0;0;0;4;0;0;3;5;2;0.01;0.001;0;0;0;0.001;0.005;0.003;0.01;0.001;0;0;0;0;22.3;0.01;3069;840;824;0;193;0;0;0;2.8;0;0;8.6;61.924;28.732;3.694;256;12.8;1 tbsp;205;1 cup;0

Поле называется
Energ_Kcal

np.sort(table, order='Energ_Kcal')


Как вытащить первый item xml?
Есть xml файл такой конструкции
<code>
<channel>
    <item>
        <link></link>
    </item>
    <item>
        <link></link>
    </item>
</channel>
</code>
Как из него выбрать первый элемент item?

Исходя из документации по работе с XML в Python:
Сначала прочитаем данные из файла и получим корневой элемент дерева XML. Не забудь название своего файла подставить.

import xml.etree.ElementTree as ET
tree = ET.parse('data.xml')
root = tree.getroot()

После этого легко получаем первый элемент:

first_element = root[0]

Если нужно пробежаться по всем элементам и вывести инфо:

for child in root:
  print(child.tag, child.attrib)


Как выдать роль при использовании команды discord py [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

 Вопросы с просьбами помочь с отладкой («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку и минимальный код для её воспроизведения прямо в вопросе. Вопросы без явного описания проблемы бесполезны для остальных посетителей. См. Как создать минимальный, самодостаточный и воспроизводимый пример.

Закрыт 1 год назад.

                        Улучшить вопрос

У меня не получается это сделать, перепробовал куча способов, на некоторых показывалось это в консоли при использовании команды
<code>
discord.ext.commands.errors.MissingRequiredArgument: message is a required argument that is missing.
</code>

@bot.command()
async def give_role(ctx: commands.Context):
    role = discord.utils.get(ctx.guild.roles, id=role_id)
    await ctx.author.add_roles(role)


Создание админки с помощью /admin
Сегодня использовал ранее метод, который мне подсказали тут. Возникла ошибка, теперь бот либо не видит канал, или вообще его не читает. Привожу код
<code>
@dp.message_handler(commands=['admin'])
async def admin(message: types.Message):
    user_status = await bot.get_chat_member(chat_id=CHANNEL_ID, user_id=message.from_user.id)
    print(user_status)
    if isinstance(user_status, ChatMemberMember):
       await bot.send_message(message.from_user.id, "Вы вошли основатель", reply_markup=nav.adminMenu)
    else:
        await bot.send_message(message.from_user.id, "Вы не администратор!")
</code>
Пишет что пользователь который создал чат, является member а не owner. Подскажите пожалуйста в чём может быть проблема?

Проблема была связанна, с тем что я создал не то что бот может читать. То есть я создал группу, где он работал но не мог читать группу. Для использование ChatMemberMember, и определение роли нужно создавать канал.


как разрешить выполнить команду только в одном канале discord py [закрыт]

Закрыт. Данный вопрос необходимо конкретизировать. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.

Закрыт 1 год назад.

                        Улучшить вопрос

Мне нужно узнавать, когда человек пишет определённую команду именно в определённом канале, и ещё, как удалять сообщения в этом канале, если это не определённая команда ))

def one_channel_for_all_commands_predicate(ctx: commands.Context):
    channel = discord.utils.get(ctx.guild.text_channels, id=channel_id)
    if channel:
        if ctx.channel != channel:
            raise commands.CheckFailure(f"error {str(ctx.author)}")
        else:
            return True
    else:
        return True

has_one_channel_for_all_commands = commands.check(one_channel_for_all_commands_predicate)

@commands.command()
@has_one_channel_for_all_commands
async def command(self, ctx: commands.Context):
    await ctx.send(1)


Как закрыть доступ к ко всем каналам кроме одной discord py
Как сделать так, чтобы можно было закрыть доступ (сделать приватными) текстовые каналы кроме одного? в python через библиотеку discord. И как сделать наоборот?, чтобы всё выполнялось командой

Вашу проблему можно решить в более лёгкой форме. Просто создайте роль через дискорд, в каналах выставьте настройки. А через бота сделайте выдачу роли:

@client.command()
async def arole(ctx, member: discord.Member, *, role: discord.Role): #Создаём функцию
    await ctx.message.delete() #Можно удалить отправленное сообщение пользователем
    await member.add_roles(role) #Добавляем роль через упоминание. БЕЗ НЕГО РАБОТАТЬ НЕ БУДЕТ. Чтобы сделать выдачу роли без упоминания - надо указать айди. Для этого в дискорде нужно к упоминанию роли добавить \ и отправить. Например: \@Роль. Мы получили айди

    #Отправка. Никак не влияет на выдачу роли. Можно убрать эмбед и сделать просто сообщение, а можно вообще не делать.
    await member.send(f"Вам выдали роль под названием: {role}. Произошло это на этом сервере: {ctx.guild.name}")
    embed = discord.Embed(title="╔=====================================╗", colour=discord.Color.greyple(),
                          description=f"{member.mention} получил следующую роль: {role}")
    await ctx.send(embed=embed) #Отправка сообщения

Этот код раотает на эту команду:
!arole @member @role. Если же вы
await member.add_roles(role) заменили на
await member.add_roles(айди) и убрали
role: discord.Role, то просто
!arole @member. Обратите внимание - знак ! - это мой префикс, у вас он может быть другой.
Если я помог вам - отметьте ответ верным. Если нет - пишите в комментарии, помогу


Вопрос по объединению DataFrame
Есть dataframe

ID
Name
Price

Совпадение
Название1
Цена1

21cd1231dw
czxca21
1324512

Совпадение
Название2
Цена2

Совпадение
Название3
Цена3

Надо по нему пробежаться и если совпадает id добавляем дубль справа в столбцы с названием name_1 и price_1
если совпадений несколько то добавляем name_2 , name_55 и тд
пробовал поиграться с объединением dataframe
merge:

df_merged = df.merge(df, on='ID')

Дубли не удаляет
на выходе получается

ID
Name
Price
NAme_x
Price_x"

Совпадение
Название1
цена 1
Название2
Цена2

Совпадение
Название1
цена 1
Название 3
Цена3

3123asdas
asdased2
12315125

Если использую

df_merged = df.join(df, rsuffix='_right')

просто находит строку и справа делает ее дубль
Короче все варианты перепробовал и более или мене что работает это .merge и то дубли оставляет.
Объясните пожалуйста, что делаю не так?
Получается даже не так, просто он находит строку и копирует ее справа за исключением ID. А нужно чтобы все id объединились в одну строку.
На выходе я хочу получить

ID
Name
Price
NAme_x
Price_x"
Name_y
Price_y

Совпадение1
Название1
цена 1
Название2
Цена2
Название3
Цена3

Совпадение2
ыфввыф
15251423
фывфыв
12331

Совпадение3
asdased2
12315125

т.е 1 строка формируется из всех строк с значением id = Совпадение1, а справа пишем значения Name и Price тех строк где id совпало и тд

Можно так попробовать.
Допустим у нас есть такой df

>>> df
   id name  price
0   1    a    100
1   1    b    200
2   1    c    300
3   2    d    400
4   2    e    500
5   2    f    600
6   3    g    700
7   3    h    800
8   1    j    900

Тогда.
Вариант 1:

new_df = df.assign(k=df.groupby(['id']).cumcount()).set_index(['id', 'k']).unstack()

Переименуем столбцы

new_df.columns = [f'{x}_{y}' for x, y in new_df.columns]

Отсортируем, чтобы столбцы были в нужном вам порядке и сбросим индекс

new_df = new_df.reindex(sorted(new_df.columns, key=lambda x: x[-1]), axis=1).reset_index()

Получаем:

>>> new_df

   id name_0  price_0 name_1  price_1 name_2  price_2 name_3  price_3
0   1      a    100.0      b    200.0      c    300.0      j    900.0
1   2      d    400.0      e    500.0      f    600.0    NaN      NaN
2   3      g    700.0      h    800.0    NaN      NaN    NaN      NaN

Вариант 2 (Вроде проще):
Без группировке в данном случае все равно никуда, поэтому

df = df.groupby('id').agg(name=('name', lambda x: x.to_list()), price=('price', lambda x: x.to_list())).reset_index()

Далее создадим функцию, которая принимает на вход ваш датафрейм и название столбца и возвращает новый датафрейм.

def return_col(your_df, col: str):
    list_of = your_df[col].to_list()
    max_len_of = max([len(i) for i in list_of])
    df_of = pd.DataFrame(list_of, columns=[f'{col}_{i}' for i in range(max_len_of)]).fillna(np.nan)
    return df_of

пример:

>>> print(return_col(df, 'name'))
  name_0 name_1 name_2 name_3
0      a      b      c      j
1      d      e      f    NaN
2      g      h    NaN    NaN

с помощью данной функции создадим несколько новых df для начальных столбцов

name = return_col(df, 'name')
price = return_col(df, 'price')

соединим их и отсортируем

df_np = pd.concat([name, price], axis=1)
df_np = df_np[sorted(df_np, key=lambda x: x[-1])]

и добавим наш id

df_last = pd.concat([df['id'], df_np], axis=1)

получим

>>> df_last

   id name_0  price_0 name_1  price_1 name_2  price_2 name_3  price_3
0   1      a      100      b      200      c    300.0      j    900.0
1   2      d      400      e      500      f    600.0    NaN      NaN
2   3      g      700      h      800    NaN      NaN    NaN      NaN

p.s. На мой взгляд первый вариант надежнее


Почему pyautogui обходит(игнорирует) исключения if, elif, else?
<code>
import pyautogui as pg

print('Выберите число от 1 до 10')
number = input()

if number == 1:
    pg.moveTo(150, 600, duration =
0.25)
    pg.click()
elif number == 2:
    pg.moveTo(100, 100)
else:
    print("Error!!!")
</code>
Подскажите, почему pyautogui игнорирует if, но при этом выводит Error
Прошу прощения Админ, не разобрался как код вбивать в теги

If не игнорирует и работает как и должно. Проблема только в том, что вы сравниваете число со строкой. То есть если использовать так

...
number = int(input())

if number == 1:
...

Или так

...
number = input()

if number == '1':
...

То все будет, работать. Причина в том, что метод
input() возвращает тип данных
string. И если сравнивать строку и число, как у вас, то всегда условие будет отрабатывать только в
else
Для понимания

>>> 1 == '1' # это ваше сравнение, всегда будет ложно, чтобы вы не ввели
False
>>> '1' == '1' # сравнение 2х строк
True
>>> 1 == 1  # сравнение 2х чисел
True


Как сделать таймер python (для скрипта)
Нужно сделать так чтобы задавался вопрос по типу - "Сколько секунд будет работать скрипт : тут значение в секундах " Потом, запускался таймер, и пока он идет - скрипт начинает работать, когда таймер заканчивается - скрипт выключается, и все по новой.
Заранее спасибо
Вот скрипт :
<code>
import keyboard
import time
from pynput.mouse import Button, Controller
from offset import *

mouse = Controller()

while True:
    keyboard.wait("space")
    while True:
        time.sleep(0.1)
        keyboard.press("d")
        mousde.click(Button.left)
        if keyboard.is_pressed("F6"):
            break
</code>

Вот пример простейшего таймера на python:
переменная
timer это количество секунд таймера

import time

timer = 30
for k in range(timer):
    time.sleep(1)
    print(timer)
    timer -= 1
    if timer == 0:
        break


Как сделать переменные в строке [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

 Вопрос вызван проблемой, которая больше не воспроизводится, или опечаткой. Хотя похожие вопросы могут быть уместны на этом сайте, решение для этого вопроса вряд ли поможет будущим посетителям. Обычно можно избежать подобных вопросов написанием и исследованием минимальной программы для воспроизведения проблемы до публикации вопроса.

Закрыт 1 год назад.

                        Улучшить вопрос

У меня есть код:
<code>
def replace(string: str):
    string.replace("%s", "popbob")
    string.replace("%h", "20")
    string.replace("%kr", "2.23")

    return string

print(replace("%s you have bad client, your hp is %h and i killed you in %kr block's!"))
</code>
По идее на выходе должно получится вот так:

popbob you have bad client, your hp is 20 and i killed you in 2.23 block's!

Но почему-то так не происходит, в чём проблема?

Потому что функция str.replace возвращает копию строки, в которой заменены все вхождения указанной строки указанным значением.
<code>
def replace(string: str):
    string = string.replace("%s", "popbob")
    string = string.replace("%h", "20")
    string = string.replace("%kr", "2.23")

    return string
</code>


Python Сами типы являются объектами, как это понять?
Цитата: "В действительности в Python даже сами типы представляют собой объекты"
Цитата: "тип объекта является объектом типа type"
Насколько я понимаю: тип - это названия (такие как int, str, list...) объектов которые создает программист, чтобы в целом понимать что это такое и что с этим делать. А объект - это информация которая хранится в памяти (т.е. a = 'abc').
Но моя логика ломается в тот момент, когда я прочитал что тип это объект, как это вообще понимать?

Это просто означает что типы в python являются, так называемыми, first-class citizens (объекты первого класса). Объекты первого класса - это такие элементы языка, которые можно передавать как параметры в функцию, вернуть в качестве результата выполнения фукнции, или присвоить переменной. Проще говоря, в python можно манипулировать типами точно так же, как и числами, строками или другими объектами.
Возможно, проще будет понять сравнив типы в языке вроде C и в Python. В C типы стираются после компиляции и не существуют во время выполнения программы. В C тип нельзя вернуть из функции в зависмости от входного параметра, нельзя сохранить в переменную и использовать позже, нельзя создать новый тип во время выполнения программы. В Python, с другой стороны, все это возможно:
<code>
# Вернуть тип в зависимости от значения параметра
def int_or_float(return_int):
    return int if return_int else float
num_type = int_or_float(False)
# И использовать его
value = num_type('123')

# Динамически создать новый тип
def mk_cls(x):
    class DynamicClass:
        def __init__(self, val):
            self.val = val
        def get(self):
            return self.val + x
    return DynamicClass

# Класс который прибавляет 1
Cls1 = mk_cls(1)
val1 = cls1(10)
assert val1.get() == 11

# Класс который прибавляет 2
Cls2 = mk_cls(2)
val2 = cls2(10)
assert val2.get() == 12
</code>


когда запускаю код: [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

 Вопрос вызван проблемой, которая больше не воспроизводится, или опечаткой. Хотя похожие вопросы могут быть уместны на этом сайте, решение для этого вопроса вряд ли поможет будущим посетителям. Обычно можно избежать подобных вопросов написанием и исследованием минимальной программы для воспроизведения проблемы до публикации вопроса.

Закрыт 1 год назад.

                        Улучшить вопрос

когда запускаю код:
<code>
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, Dispatcher
import logging

logging.basicConfig(format='%(levelname)s - %(message)s',
                    level=logging.DEBUG)
logger = logging.getLogger(__name__)

updater = None

def start_bot():
    global updater
    updater = Updater(
        '5193828386:AAHWl2QUJY-EBeTyc5ms-FftV6R41tbd6FQ', use_context=True)

    updater.start_polling()
    updater.idle()

start_bot()
</code>
программа пишет:
Traceback (most recent call last):
File "C:\Users\user\Desktop\Bot", line 1, in
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, Dispatcher
ModuleNotFoundError: No module named 'telegram'
pip install python-telegram-bot установлен
работаю в Sublime Text

Проверьте, установлен ли
python-telegram-bot на интерпретаторе, который выбран в качестве интерпретатора проекта.
В PyCharm можно проверь это по следующему пути:

File -> Settings -> Project: *название проекта* -> Python Interpreter


В цикле for языка Python не могу получить ожидаемое значение счетчика [дубликат]

На этот вопрос уже даны ответы здесь:

Как в Python прописать условие if, чтобы получить ожидаемый ответ?

                                (2 ответа)

Закрыт 1 год назад.

Проект по распознаванию спикера с помощью модуля resemblyzer. Структура папок такова: есть директория
speakers, в которой лежат папки
spk1,
spk2 и т.д. В каждой из папок - по нескольку записей отдельных спикеров (одна папка - один говорящий). В ходе обработки сделал словарь, в котором ключи - те самые директории
spk1,
spk2 и проч., а их значения - эмбединги (представления) записей спикеров.
Далее я хочу сравнить попарно записи каждого спикера, чтобы посчитать метрику accuracy (как часто система ошибается). На этом первом этапе приводимого ниже скрипта делаю следующее: создаю попарные комбинации с тем, чтобы перебрать все возможные сочетания записей всякого говорящего внутри "его" папки.
Второй этап - поместить эмбединги записей в матрицы подобия и сравнить их посредством косинусного сходства.
В финале (третий этап) считаем accuracy. Видим: перебрали 46 комбинаций, но почему-то получили 0 совпадений. Хотя если распечатать матрицы подобия, очевидно, что совпадения наличествуют. Что не так в цикле for?
Ранее схожая проблема возникала, когда ту же задачу я решал с помощью библиотеки speechbrain. Тогда ошибка счета была связана с тензорным типом данных, генерирующим логические ответы
True либо
False. Здесь, как мне представляется, иной случай.
Код:

!pip install resemblyzer
! pip install umap
import numpy as np
from itertools import combinations

num_true=0
num_total=0

# 1 этап - ради сравнения перебираем значения словаря (т.е. эмбединги записей спикеров) и создаем список всех возможных комбинаций:
# (спикер 1 запись 1 - спикер 1 запись 2), (спикер 1 запись 1 - спикер 1 запись 3) и т.д.
for elems in speaker_wavs.values():
  # print(elems[0])
  tuples = list(combinations(elems, 2)) # получаем перебор всех комбинаций

  # 2 этап - создаем эмбединги записей
  for single in tuples:         # идем по каждой комбинации в списке
      # функция .embed_utterance() создает эмбединги голосов
      embeds = (np.array( [encoder.embed_utterance(single[0]) ] ), np.array([encoder.embed_utterance(single[1]) ] ) )
      num_total+=1

      # Вычислим матрицу подобия. Сходство двух эмбедингов - это просто их точечное произведение,
      # потому что метрикой сходства является косинусное сходство, а эмбединги уже нормированы по L2.
      # Короткая версия:
      utt_sim_matrix = np.inner(embeds[0], embeds[1])    # Внутреннее произведение двух массивов.
      # print('Матрица_1', utt_sim_matrix) # распечатать, если надо наглядно сравнить эмбединги

      # Длинная, подробная версия:
      utt_sim_matrix2 = np.zeros( (len(embeds[0]), len(embeds[1]) ) )
      for i in range(len(embeds[0])):
        for j in range(len(embeds[1])):
        # Обозначение @ эквивалентно np.dot(embedds_a[i], embedds_b[i])
          utt_sim_matrix2[i, j] = embeds[0][i] @ embeds[1][j]
          # print('Матрица_2', utt_sim_matrix2)  # распечатать, если надо наглядно сравнить эмбединги

          # Возвращает True, если два массива равны по элементам в пределах допуска
          if np.allclose(utt_sim_matrix, utt_sim_matrix2) == 'True':
            num_true+=1

# print(num_true)   # сейчас получаем 0
# print(num_total)  # сейчас получаем 46

# Этап 3 - считаем метрику accuracy:
if num_total !=0:
  accuracy = num_true/num_total
  print(accuracy)
else:
  print('На ноль делить нельзя')

numpy.allclose() возвращает или True или False, поэтому надо сравнивать не со строкой, а с этими значениями. Да и на самом деле даже сравнивать не требуется, потому что достаточно и

if np.allclose(utt_sim_matrix, utt_sim_matrix2): # т.к. тут или True или False, то и сравнивать не нужно
        num_true+=1


Запуск двух функций одновременно
У меня есть две функции. Функция
run выполняется бесконечно. Как запустить две эти функции, чтобы и django заработал, и функция
run работала?

def main():
    """Run administrative tasks."""
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_site.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc

    execute_from_command_line(sys.argv)

if __name__ == '__main__':
    run() # Она выполняется бесконечно
    main()

Запускайте функции с бесконечным циклом в другом потоке.
<code>
th = Thread(target=run)
th.start()
</code>


Парсер всех XML файлов в папке

Есть задача - сделать парсер для всех XML файлов, лежащих в папке на рабочем столе, используя BS4 и/или LXML.
Я новичок в этом вопросе, и единственное, на что хватило чтения документации - написать парсер для одного документа. А нужен такой, который пройдется по всем файлам (их слишком много, в ручную никогда не переписать, ибо файлы копились годами).
Ближе к сути - мой парсер считывает 4 тега в документе, и в дальнейшем он должен считывать теги вообще всех файлов, и сепарировать их по спискам (условный тег  в список 1,  в список 2 и т.д.
Пример текущего скрипта для парсинга 1 файла:
<code>
from bs4 import BeautifulSoup
import lxml

with open("C:/Users/user/Desktop/folder/file.xml") as file:
    src = file.read()
soup = BeautifulSoup(src, "lxml")

uid = soup.find("prop", attrs={'name':'uid'})
print(uid.text)
language = soup.find("prop", attrs={'name':'language'})
print(language.text)
source = soup.find("prop", attrs={'name':'source'})
print(source.text)
PROFILE_URL = soup.find('PROFILE_URL')
print(PROFILE_URL)
</code>
Как это можно реализовать? Уже весь мозг себе сломал с этим парсингом...
Чукча не Senior, тапками не кидаться :))

Теперь составьте список из xml файлов  и пройдитесь по нему в цикле вставляя в вашу функцию путь к файлу .
<code>
import os
f = r"C:/Users/user/Desktop/folder"
e = r".xml"
g = [os.path.join(f, _) for _ in os.listdir(f) if   _.endswith(e)]
for a in g:
    with open(a, encoding="utf-8") as file:
        src = file.read()
.....
</code>


Относительный путь до файла на Python
Хочу добавить относительный путь в консольную программу на Python. (для возможности портирования на другие ПК).
Пишет "No such file or directory". Абсолютный путь работает.
Пытался каким-то образом изменить активную директорию, но не смог.
'''
<code>
def download_fiels():
    with open("../wordbooks/russian_nouns.txt", encoding='utf-8') as file:
        WORD_LIST = [row.strip() for row in file]

    with open("../wordbooks/russian_pril.txt", encoding='utf-8') as file:
        QUALITY_LIST = [row.strip() for row in file]

    with open("../wordbooks/russian_imena.txt", encoding='utf-8') as file:
        NAME_LIST = [row.strip() for row in file]
    return WORD_LIST, QUALITY_LIST, NAME_LIST
</code>
'''

В питоне есть зарезервированная переменная
__file__, в которую записывается путь до загруженного модуля. В данном случае её можно использовать таким образом:

import os

with open(os.path.dirname(os.path.abspath(__file__))
          + "/wordbooks/russian_nouns.txt", "r", encoding='utf-8') as file:
    # код

Так Вы сможете вызывать исполняемый файл вашей программы из любой директории.


Не понимаю почему выдаёт ошибку [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Закрыт 1 год назад.

Вопрос вызван проблемой, которая больше не воспроизводится, или опечаткой. Хотя похожие вопросы могут быть уместны на этом сайте, решение для этого вопроса вряд ли поможет будущим посетителям. Обычно можно избежать подобных вопросов написанием и исследованием минимальной программы для воспроизведения проблемы до публикации вопроса.
Вопросы с просьбами помочь с отладкой («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку и минимальный код для её воспроизведения прямо в вопросе. Вопросы без явного описания проблемы бесполезны для остальных посетителей. См. Как создать минимальный, самодостаточный и воспроизводимый пример.

                        Улучшить вопрос

Не могу понять почему ошибка
Ошибка:

Traceback (most recent call last):
  ...
  File "D:\test.py", line 18, in check
    write("data\\{}\\score.txt".format(userid), "0")
  File "D:\test.py", line 8, in write
    with open(file_name, "w") as file:
TypeError: 'str' object cannot be interpreted as an integer

Код:

from os import *
from os.path import *

def write(file_name, value):
    with open(file_name, "w") as file:
        file.write(str(value))

def check(userid):
    if isdir("data\\{}".format(userid)):
        return True

    makedirs("data\\{}".format(userid))
    write("data\\{}\\score.txt".format(userid), "0")

check(123456789)

Проблема в том, что в библиотеке
os уже есть функция
open, а вы импортируете все функции из неё, поэтому стандартная функция
open перезаписывается.
Замените эти строки:

from os import *
from os.path import *

На эту:

import os

И эти

if isdir("data\\{}".format(userid)):
    return True
makedirs("data\\{}".format(userid))

На эти:

if os.path.isdir("data\\{}".format(userid)):
    return True
os.makedirs("data\\{}".format(userid))


Как сделать, чтобы при нажатии кнопки стиралось то что в поле html
Я сделал поле для ввода и кнопку отправить. Я хочу сделать так, чтобы при нажатии на кнопку, я стирал то что в поле. Как это сделать?
Если надо, пишу на python на flask

<input type="text" size="40"/>

    <input type="submit",value='Отправить'>

Полю, которое нужно очищать следует присвоить аттрибут id:

<input id="field-0" type="text" size="40"/>

А на событие нажатия кнопки повесить скрипт, который будет очищать поле ввода:

<p>
    <input type="submit" value='Отправить' onclick="document.querySelector('.field-0').value=''">
</p>

Полностью форма будет такой:

<input id="field-0" type="text" size="40"/>
<p>
    <input type="submit" value='Отправить' onclick="document.querySelector('#field-0').value=''">
</p>


Как вывести число строки в django
Не могу решить задачу на django.
Есть такая таблица
Ключ   Заголовок
Топ детективов: detective
Топ фантастики:  scifi
Топ нехудожественных: nonfiction
И такая модель

class Book(models.Model):
    title=models.CharField(max_length=30)
    author=models.CharField(max_length=30)
    genre=models.CharField(max_length=30)
    sales=models.IntegerField()

Сама задача: представлена информация, сколько каких книг было продано за последний год. надо составить топ-5(по продажам) по каждому жанру: детектив () нон-фикшн(nonfiction) и фантастика(scifi).
Пример вывода:
Топ детективов:
1 Девушка с татуировкой дракона 3579
2 Исчезнувшая 2205
3 Девушка в поезде 1909
4 Невинная 1740
5 Нож 1620
Вывод самих книг я сделал, но не могу понять, как пронумеровать строки

book = Book.objects.all()
if genre == 'detective':
    books = Book.objects.filter(genre='detective').order_by('-sales')[0:5]
    for detectives in books:
            print(detectives.title, detectives.sales)
elif genre == 'scifi':
    for scifi in Book.objects.filter(genre='scifi').order_by('-sales')[0:5]:
        print(scifi.title, scifi.sales)

elif genre == 'nonfiction':
    for nonfiction in Book.objects.filter(genre='nonfiction').order_by('-sales')[0:5]:
        print(nonfiction.title, nonfiction.sales)

Весь Ваш код можно переписать в три строки с учётом поставленной задачи
<code>
books = Book.objects.filter(genre=genre).order_by('-sales')
for index, book in enumerate(books[:5], start=1):
    print(index, book.title, book.sales)
</code>


logger.catch c аргументами
Я использую loguru для ведения логов. Можно ли при использовании
@logger.catch() указать еще какие-либо аргументы?
Есть логер и функция в которую сыпятся сообщения

def func(error_message):
    ...
logger.add(func, catch=True)

И есть функция с декоратором генерирующая ошибку

@bot.message_handler(content_types=['text'])
@logger.catch()
def start(message):
    message.text / 2

При отлове ошибки, весь трейс я получаю в параметре
error_message у
func, можно как-то еще туда что-либо прокинуть?
id пользователя скажем

То что я искал - это loger.bind
<code>
def error_caught(message):
    result = loads(message)
    bot.send_message(...)

@bot.message_handler(content_types=['text'])
def main_func(message: Message):
    with my_loger.bind(user_id=message.from_user.id).catch():
        message.text / 2

my_loger.configure(extra={"user_id": "", })
my_loger.add(error_caught, format='{message}-{extra[user_id]}', serialize=True)
</code>


Не работает код при открытии в другом браузере и не загружает информацию с HTTP страниц
У меня не работает скрипт сниффера пакетов, когда я использую MicrosoftEdge всё работает прекрасно, HTTP загружаются, но страница просто пустая (если это возможно, то объясните, почему так происходит. Как сделать так чтобы страницы открывались в HTTP, так как я понизил им уровень с HTTPS до HTTP). Ещё у меня возникает сложность, при использовании браузера Firefox мой скрипт перестает работать и выдаёт ошибку:
<code>
def get_login_info(packet):
    if packet.haslayer(scapy.Raw):
        load = packet[scapy.Raw].load
        keywords = ['username', 'user', 'login', 'password', 'pass']
        for keyword in keywords:
            if keyword in load:
                return load
</code>

in get_login_info if keyword in load: TypeError: a bytes-like object is required, not 'str'

Здесь ошибка не в логике, описанной в вопросе, а в том, что вы сравниваете два значения с разными типами данных.
Воспроизведу вашу ошибку

keywords = ['username', 'user', 'login', 'password', 'pass']
load  = b"login may be or not, how can I check?"
for keyword in keywords:
    if keyword in load:
        print(f"Founded {keyword}")

Ну, и результат:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
TypeError: a bytes-like object is required, not 'str'

Из вашего кода абсолютно понятно, что вы имеете тип
str для сущности
keyword. А из ошибки можно сделать вывод, что сущность
load имеет тип данных
bytes. Для проверки всегда можно вывести их тип

>>> type(load)
<class 'bytes'>
>>> type(keywords[0])
<class 'str'>

Как решить. Очевидно привести сравниваемые данные к одному типу. Метод
decode() позволяет привести данные из байтовой последовательности к строке

keywords = ['username', 'user', 'login', 'password', 'pass']
load  = b"login may be or not, how can I check?"
for keyword in keywords:
    if keyword in load.decode(): # здесь преобразование
        print(f"Founded: {keyword}")

Вывод

Founded: login

Это пример для понимания и нахождения ошибки. Естественно,
load может содержать данные в другом виде. Покажу пример для
json, который приходит в виде байтовой последовательности

import json
keywords = ['username', 'user', 'login', 'password', 'pass']
load  = b'{"login":"loginsnts","user":"Bradly Cooper"}'
load_dict = json.loads(load)
for keyword in keywords:
    if keyword in load_dict.keys():
        print(f"Founded: {keyword}")

вывод

Founded: user
Founded: login


Как пройтись по строке и вставить символ перед нужным элементом? (python) [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

 Учебные задания допустимы в качестве вопросов только при условии, что вы пытались решить их самостоятельно перед тем, как задать вопрос. Пожалуйста, отредактируйте вопрос и укажите, что именно вызвало у вас трудности при решении задачи. Например, приведите код, который вы написали, пытаясь решить задачу

Закрыт 1 год назад.

                        Улучшить вопрос

Есть вот такая строка: 'XXX34X65236X36'
Нужно получить вот такую 'X-X-X-34X-65236X-36'


Получаю ошибку и не могу понять почему?
<code>
def process(packet):
    if packet.haslayer(http.HTTPRequest):
        url = get_url(packet)
        print('[+] HTTP Request >>' + url)
</code>
получаю ошибку:

TypeError: can only concatenate str (not "bytes") to str

Вы пытаетесь сложить два разных типа byte и str.
Исправить можно указанием кодировки выводе:

print('[+] HTTP Request >>' + url.decode('utf8'))

Либо выводом через str.format (что бывает полезно для логов):

print('[+] HTTP Request >>'.format(url))


Как заменить определенный участок текста в файле WORD с помощью питона
Все как и в заголовке - нужно взять документ формата .docx и поменять в нем определенные слова на введенные ранее пользователем.
<code>
import docx
doc = docx.Document('F://PythonProjects//Trash//example.docx')
paras = doc.paragraphs

name = input()

for para in paras:
    para = para.text.split(' ')
    for word in para:
        //'NAME,' - строка в исходном файле
        if word == 'NAME,':
            word = name + ','
    para = ' '.join(para)
</code>
Ошибки не возникает, но и ничего не работает, точнее работает все кроме замены слова на другое.
Кто то может подсказать что я сделал не так?

В общем, код можно сократить и не забыть записать внесенные изменения:
<code>
import docx
doc = docx.Document(docx = 'test.docx')

paras = doc.paragraphs

name = "Вася"

for para in paras:
    para.text = para.text.replace('NAME', name)

doc.save('test1.docx')
</code>


Как найти все теги img в определенном блоке div. Beautiful Soup. Python
Подскажите, пожалуйста.
Есть HTML:

<div class="mw-body-content" id="bodyContent">
<img alt="" class="thumbborder" data-file-height="600">
</div>

Как я могу достать все
img именно в данном диве
id="bodyContent" с помощью Beautiful Soup?

Решение через css-селектор
Например:

...
root = BeautifulSoup(html, 'html.parser')
for img_el in root.select('#bodyContent > img'):
    print(img_el)

Если
img могут быть не только прямыми детьми
id="bodyContent", т.е. на разных уровнях вложенности, то без
>:
#bodyContent img


Как сделать int для каждого элемента списка во вложенных списках?
Есть какой-то двумерный список:
a = [['6', '3', '1'], ['5', '4', '-8'], ['-7', '3', '6']]
как каждый его элемент преобразовать в целочисленное?:
a = [[6, 3, 1], [5, 4, -8], [-7, 3, 6]]

Вам и не нужно использовать map, если можно использовать простую генерацию списков:
<code>
a = [['6', '3', '1'], ['5', '4', '-8'], ['-7', '3', '6']]
a = [[int(i) for i in j] for j in a]
print(a)
</code>

[[6, 3, 1], [5, 4, -8], [-7, 3, 6]]