XML не читается Python
Есть заданная форма xml. Внешняя часть выглядит так
И дальше этой части он не читает, хотя есть множество вложений. Если убрать всю информацию во внешней части он начинает читать все остальные вложения. Как считывать XML без потери информации во внешней части?
Использую ElementTree
Так информация после name не считывается и при print(getroot) выводит <Element '{name3/name.xsd}name' at 0x0000000002A35720>

<name xmlns="gogle/name.xsd" xmlns:xsi="name2.org/2001/XMLSchema-instance" xsi:schemaLocation="name3/name.xsd">
    <Craft>315</Craft>
    <StartingSIP>95</StartingSIP>
    <StartingSIPTime>2021-09-23T10:03:55</StartingSIPTime>
    <Starting>1356</Starting>
    <Sessions> ...... </Sessions>
</name>

Если сделать так весь остальной xml считывается

<name>
    <Craft>315</Craft>
    <StartingSIP>95</StartingSIP>
    <StartingSIPTime>2021-09-23T10:03:55</StartingSIPTime>
    <Starting>1356</Starting>
    <Sessions> ...... </Sessions>
</name>

trees = ET.parse(filename)

    root = trees.getroot()

    for i in root:
        print(i)

и выводит он

<Element 'Craft' at 0x0000000002A95EA0>
<Element 'StartingSIP' at 0x0000000002A95DB0>
<Element 'StartingSIPTime' at 0x0000000002A95770>
<Element 'Starting' at 0x0000000002A95C20>
<Element 'Sessions' at 0x0000000002A95B80>

from lxml import etree

xml_raw = """<name xmlns="gogle/name.xsd" xmlns:xsi="name2.org/2001/XMLSchema-instance" xsi:schemaLocation="name3/name.xsd">
    <Craft>315</Craft>
    <StartingSIP>95</StartingSIP>
    <StartingSIPTime>2021-09-23T10:03:55</StartingSIPTime>
    <Starting>1356</Starting>
    <Sessions> ...... </Sessions>
</name>"""
root = etree.fromstring(xml_raw)
for elem in root.getchildren():
    if not elem.text:
        text = "None"
    else:
        text = elem.text
    print(elem.tag + " => " + text)

Вывод:
{gogle/name.xsd}Craft => 315
{gogle/name.xsd}StartingSIP => 95
{gogle/name.xsd}StartingSIPTime => 2021-09-23T10:03:55
{gogle/name.xsd}Starting => 1356
{gogle/name.xsd}Sessions =>  ......

import xml.etree.ElementTree as ET

tree = ET.parse('1.xml')
root = tree.getroot()
for child in root:
    print(child.tag, child.text)

Вывод:
{gogle/name.xsd}Craft 315
{gogle/name.xsd}StartingSIP 95
{gogle/name.xsd}StartingSIPTime 2021-09-23T10:03:55
{gogle/name.xsd}Starting 1356
{gogle/name.xsd}Sessions  ......
1.xml

<name xmlns="gogle/name.xsd" xmlns:xsi="name2.org/2001/XMLSchema-instance" xsi:schemaLocation="name3/name.xsd">
    <Craft>315</Craft>
    <StartingSIP>95</StartingSIP>
    <StartingSIPTime>2021-09-23T10:03:55</StartingSIPTime>
    <Starting>1356</Starting>
    <Sessions> ...... </Sessions>
</name>


Напишите рекурсивную функцию, которая осуществляет суммирование чисел в списке. Выводит ошибку!
Напишите рекурсивную функцию, которая осуществляет суммирование чисел в списке. Список должен быть сгенерирован из 10 чисел, каждое в диапазоне от 1 до 100.
<code>
import random

def Summa(n, Massiv, sum = 0):
      if n == 1: return sum
      sum += Massiv[n-1]
      return Summa(n-1, Massiv, sum)

def massiv_generator():
      m = []
      for i in range(10):
            m += random.randrange(1, 101)
      return m

m = massiv_generator()
n = len(m)
sum = Summa(n, m)
print("Результат",sum)
</code>

Тут вы пытаетесь к массиву прибавить число, такая запись само собой не является валидной. Чтобы добавить число в массив, существует метод
[].append()
так что просто
замените

 m += random.randrange(1, 101)

на

  m.append(random.randrange(1, 101))


Pygame. Нужно сделать анимацию
Всех приветствую! Начал изучать pygame и для моей игры понадобилось сделать прикрепленную камеру к персонажу, и я это сделал, но сейчас уже немного путаюсь в своем коде. В общем, нужно сделать к примеру idle анимацию для персонажа, я сделал пару попыток, но как - то не вышло.
Пожалуйста, подскажите как это выполнить. Заранее спасибо.
Вот мой код:
<code>
import sys
from random import randint

class Enemies(pygame.sprite.Sprite):
    def __init__(self, pos, group):
        super(Enemies, self).__init__(group)
        self.image = pygame.image.load('enemy/name.png')
        self.rect = self.image.get_rect(topleft = pos)

class Player(pygame.sprite.Sprite):
    def __init__(self, pos, group):
        super(Player, self).__init__(group)
        self.idle_animation = [pygame.image.load('player/idle/idle' + f"{i}.png") for i in range(1, 11)]
        self.idle = True
        self.image = pygame.image.load('player/idle/idle1.png')
        self.rect = self.image.get_rect(center = pos)
        self.direction = pygame.math.Vector2()
        self.speed = 5

    def input(self):
        key = pygame.key.get_pressed()

        if key[pygame.K_w]:
            self.direction.y = -1
            self.idle = False
        elif key[pygame.K_s]:
            self.direction.y = 1
            self.idle = False
        else:
            self.direction.y = 0
            self.idle = True

        if key[pygame.K_d]:
            self.direction.x = 1
            self.idle = False
        elif key[pygame.K_a]:
            self.direction.x = -1
            self.idle = False
        else:
            self.direction.x = 0
            self.idle = True

        if self.idle == True:
            for i in range(1, 11):
                self.image = pygame.image.load('player/idle/idle' + str(i) + '.png')

    def update(self):
        self.input()
        self.rect.center += self.direction * self.speed

class CameraGroup(pygame.sprite.Group):
    def __init__(self):
        super(CameraGroup, self).__init__()
        self.display_surface = pygame.display.get_surface()

        self.offset = pygame.math.Vector2()
        self.half_w = self.display_surface.get_size()[0] // 2
        self.half_h = self.display_surface.get_size()[1] // 2

        self.ground_surf = pygame.image.load('bg/bg.png')
        self.ground_rect = self.ground_surf.get_rect(topleft = (0,0))

    def center_target_camera(self, target):
        self.offset.x = target.rect.centerx - self.half_w
        self.offset.y = target.rect.centery - self.half_h

    def custom_draw(self, player):
        self.center_target_camera(player)

        ground_offset = self.ground_rect.topleft - self.offset
        self.display_surface.blit(self.ground_surf, ground_offset)

        for sprite in sorted(self.sprites(), key = lambda sprite: sprite.rect.centery):
            offset_pos = sprite.rect.topleft - self.offset
            self.display_surface.blit(sprite.image, offset_pos)

pygame.init()
screen = pygame.display.set_mode((640, 360), pygame.FULLSCREEN)
pygame.mouse.set_visible(False)

camera_group = CameraGroup()
player = Player((640, 360), camera_group)

for i in range(20):
    random_x = randint(0, 1000)
    random_y = randint(0, 1000)
    Enemies((random_x, random_y), camera_group)

fps = 30
clock = pygame.time.Clock()
true = True

while true:
    clock.tick(fps)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        if pygame.key.get_pressed()[pygame.K_ESCAPE]:
            event.type = pygame.QUIT

    screen.fill([255, 255, 255])

    camera_group.update()
    camera_group.custom_draw(player)

    pygame.display.flip()
</code>

Во время апдейта ты просто 10 раз за кадр меняешь картинку. В смысле, ты делаешь это в коде, но показывается в итоге последняя. А тебе нужно раз в кадр менять картинку
Хороший пример есть здесь в разделе Explosion
Немного изменила его под твои нужды
<code>
class Explosion(pygame.sprite.Sprite):
    def __init__(self, size, center):
        pygame.sprite.Sprite.__init__(self)
        self.size = size
        self.anim = [...] # загрузка твоих картинок для анимации
        self.image = self.anim[0]
        self.rect = self.image.get_rect()
        self.rect.center = center

        self.frame = 0 # текущий кадр
        self.last_update = pygame.time.get_ticks()
        self.frame_rate = 50 # как быстро кадры меняются

    def update(self):
        now = pygame.time.get_ticks()
        if now - self.last_update > self.frame_rate:
            self.last_update = now
            self.frame += 1
            if self.frame == len(self.anim):
                self.frame = 0

            self.image = self.anim[self.frame]

</code>


Python: Как ускорить код (приемы, официальные рекомендации) [закрыт]

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

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

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

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

Моя программы слишком медленная, как ее ускорить?

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

Сделайте ваш алгоритм быстрее (или поменяйте на более быстрый), что может дать гораздо большие преимущества, чем пытаться разбрасывать микро-оптимизацию по всему вашему коду
Используйте верные структуры данных. Изучите документацию по встроенным типам и модуль collections
Когда в стандартной библиотеке представлен примитив, он, скорее всего (хотя это не гарантируется), будет быстрее любой альтернативы, которую вы можете придумать. Это верно вдвойне для примитивов написанных на С, таких как встроенные функции (builtins) и некоторые типы расширений. Например, смело используйте либо встроенный метод
list.sort(), либо связанную с ним функцию
sorted() для выполнения сортировки.
Абстракции, как правило, создают косвенность (так же называемая разыменованием) и заставляют интерпретатор работать больше. Если уровни косвенности перевешивают количество проделанной полезной работы, ваша программа будет работать медленнее. Вам следует избегать чрезмерной абстракции, особенно в виде крошечных функций или методов (которые также часто ухудшают читабельность)

Если вы достигли предела того, что может предоставить чистый Python, то есть инструменты, который позволяют углубиться еще дальше. Например, Cython позволяет скомпилировать слегка измененную версию Python кода в расширение С, что может быть использовано на различных платформах.
Cython может использовать преимущества компиляции (и необязательных аннотаций типов), чтобы сделать ваш код значительно быстрее, чем при интерпретации. Если вы уверены в своих навыках программирования на C, вы также можете самостоятельно написать модуль расширения C.


Как принять человека в канал телеграмм и написать ему сообщение от лица бота?
Стоит задача: когда человек вступает в канал, то нужно чтобы бот (если нужно, то бот в канале будет состоять) писал сообщение в личку. При этом ботов, которые пишут сообщения в лс >1 и вход можно сделать как с одобрениями администратора, так и без.
Использовать telebot или aiogram?

PS. К слову это такой себе способ сделать так чтобы бот писал первым. Забавно.
Итак чтобы повторить то что ты кидал по ссылке, я немного помучался. Собственно шаги.

делаем бота в ботфазере
даем боту возможность читать все сообщения (Group Privacy)
создаем канал
добавляем бота как администратора
заходим в управление каналом - пригласительные ссылки - создать новую ссылку - ставим галку Заявки на вступление - ДОБАВИТЬ
теперь переходим к коду бота

<code>
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage

from data import config

bot = Bot(token=config.BOT_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)

@dp.chat_join_request_handler()
async def start1(update: types.ChatJoinRequest):
    # тут мы принимаем юзера в канал
    await update.approve()
    # а тут отправляем сообщение
    await bot.send_message(chat_id=update.from_user.id, text="текст сообщения бота в лс юзеру")

if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)
</code>


Проблема с выводом finally при переборе except
Всем привет,
Не могу понять, почему интерпретатор не ставит finally в приоритет и не выводит его, даже если возникла ошибка?
Программа принимает два аргумента и делит один на другой. Пытаюсь поймать исключения и вывести их значение в текстовом формате. И в любом случае выводится условия finally.
Пример кода:
<code>
def separator(num_1, num_2):
  try:
    ans = num_1 / num_2
    return ans
except ZeroDivisionError as e:
    print(f'ай яй, яй делить на ноль можно не многим__', e)
except TypeError as e:
    print(f'Ну и как ты собрался делить числа и строки?__', e)
except NameError as e:
    print(f'Непонятный символ__', e)
finally:
    print("I'm happy that you learn python")

print(separator(10, p))
</code>
Если указать к примеру любое значение, интерпретатор выдает NameError. И по идее должен вывести finally. И то, что в одном из except было указано за NameError, но условие except с NameError даже не проходит debug.
Заранее благодарю за помощь в понимании где была допущена ошибка.

Если вы про то, что интерпретатор ругается на неизвестную переменную
p:

print(separator(10, p))

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-230-e9f4a0378cef> in <module>
     12         print("I'm happy that you learn python")
     13
---> 14 print(separator(10, p))

NameError: name 'p' is not defined

То тут ведь до вызова функции
separator ход и не доходит, и поэтому блок
try/except/finally, который расположен внутри функции separator просто не выполняется. Питон не понимает, что такое
p и не может вызвать функцию
separator - ведь неизвестно, какие аргументы ей нужно передавать.
Если хотите поймать ошибку именно в этой строке, то и нужно именно её окружать конструкцией
try/except/finally:

try:
    print(separator(10, p))
except NameError as e:
    print(f'Непонятный символ__', e)
finally:
    print("I'm happy that you learn python")

Вывод:

Непонятный символ__ name 'p' is not defined
I'm happy that you learn python


Как протестировать вызывается ли функция из класса Django DRF APIView
Хочу реализовать слой сервисов в Django DRF. Пытаюсь написать тест, проверяющий, вызывается ли функция сервиса(создание автора) из класса. Посылаю пост запрос в тестах, но функция не отрабатывает, хотя получаю статус 201 о создании объекта.
views.py

class AuthorListApiView(APIView):
    permission_classes = [permissions.IsAuthenticated]

    class InputSerializer(serializers.Serializer):
        name = serializers.CharField()

    def post(self, request):
        serializer = self.InputSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)

        create_author(**serializer.validated_data)

        return Response(serializer.data, status=status.HTTP_201_CREATED)

services.py

def create_author(name: str) -> Author:
    """
    Create a Author model object.
    """
    author = Author(name=name)

    author.full_clean()
    author.save()

    return author

test_view.py

from unittest import mock

from django.urls import reverse
from faker import Faker
from test_plus.test import TestCase as PlusTestCase

from books.views import AuthorListApiView

faker = Faker()

class AuthorListApiViewTest(PlusTestCase):
    def setUp(self):
        self.url = reverse('authors')
        self.data = {
            'name': faker.pystr(max_chars=20)
        }
        self.user = self.make_user('user')

    def test_api_view_can_be_accessed(self):
        self.client.get(self.url)
        self.response_200

    def test_api_view_can_create(self):
        self.client.post(self.url, data=self.data)
        self.response_201

    @mock.patch('books.services.create_author')
    def test_view_calls_service(self, service_mock):
        with self.login(self.user):
            response = self.client.post(self.url, data=self.data)
            print(response.status_code)
        service_mock.assert_called_once_with(**self.data)

AssertionError:

 Found 8 test(s).
 Creating test database for alias 'default'...
 System check identified no issues (0 silenced).
 ..201
 F.....
======================================================================
 FAIL: test_view_calls_service
(books.tests.test_views.AuthorListApiViewTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "c:\users\user\appdata\local\programs\python\python38-
32\lib\unittest\mock.py", line 1342, in patched
  return func(*newargs, **newkeywargs)
  File "F:\DeepMind\books_api\books\tests\test_views.py", line 34, in
    test_view_calls_service
    service_mock.assert_called_once_with(**self.data)
  File "c:\users\user\appdata\local\programs\python\python38-
32\lib\unittest\mock.py", line 918, in assert_called_once_with
  raise AssertionError(msg)

AssertionError: Expected 'create_author' to be called once. Called 0 times.

----------------------------------------------------------------------
Ran 8 tests in 1.626s

FAILED (failures=1)
Destroying test database for alias 'default'...

На англоязычной версии сайта дали ответ. Патчить модуль нужно там где функция вызывается, а не там где определяется.
<code>
# test_view.py
class AuthorListApiViewTest(PlusTestCase):

    @mock.patch('books.views.create_author')
    def test_view_calls_service(self, service_mock):
        ...
</code>


rep = requests.post(url, headers=headers, cookies=cookies, data=data).json()
first = rep["firstProduct"]
last = rep["lastProduct"]
current_Page = rep['currentPage']
total_pages = rep['totalPages']
soup = BeautifulSoup(rep['productsHtml'], 'lxml')


Условие выполняется по двойному нажатию кнопки в клавиатуре
Делаю бота на python aiogram, столкнулся с проблемой. Сейчас во втором состоянии
Task.problem условие if отрабатывается при двойном нажатии на кнопку (Интернет/Замки), как можно сделать так чтобы условие с первого раза создавало новое состояние Task.lock.set() или Task.internet.set()

import logging

from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.utils import executor

logging.basicConfig(level=logging.INFO)

API_TOKEN = 'ключ'

bot = Bot(token=API_TOKEN)
number_task = 0
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)

class Task(StatesGroup):
    problem = State()
    choose_problem = State()
    internet = State()
    lock = State()

@dp.message_handler(commands='start')
async def bot_start(message: types.Message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, selective=True)
    markup.add("Первый выбор", "Второй выбор")
    await Task.problem.set()

    await message.answer("Выберите:", reply_markup=markup)

@dp.message_handler(state=Task.problem)
async def process_name(message: types.Message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, selective=True)
    markup.add("Интернет", "Замки")
    if message.text == "Интернет":
        await Task.internet.set()
    elif message.text == "Замки":
        await Task.lock.set()
    await message.answer("Что случилось", reply_markup=markup)

@dp.message_handler(text="Замки", state=Task.lock)
async def without_puree(message: types.Message):

    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    markup.add("Работает", "Не работает")
    await Task.next()
    await message.answer(text="Что именно?", reply_markup=markup)

@dp.message_handler(text="Интернет", state=Task.internet)
async def without_puree(message: types.Message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    markup.add("Работает", "Не работает")
    await Task.next()
    await message.answer(text="Что именно?", reply_markup=markup)

if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)

Где-то вот так. А вообще рекомендую использовать инлайн кнопки, вместо обычных. С ними можно обойтись даже без машины состояний.
<code>
class Task(StatesGroup):
    problem = State()
    choose_problem = State()
    kakoito_next_state = State()

@dp.message_handler(state=Task.problem)
async def process_name(message: types.Message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, selective=True)
    markup.add("Интернет", "Замки")
    await message.answer("Что случилось", reply_markup=markup)
    await Task.choose_problem.set()

@dp.message_handler(text="Замки", state=Task.choose_problem)
async def without_puree(message: types.Message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    markup.add("Работает", "Не работает")
    await Task.next()
    await message.answer(text="Что именно?", reply_markup=markup)

@dp.message_handler(text="Интернет", state=Task.choose_problem)
async def without_puree(message: types.Message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    markup.add("Работает", "Не работает")
    await Task.next()
    await message.answer(text="Что именно?", reply_markup=markup)
</code>


преобразование словесного вида числа в число
Здравствуйте и снова я с тупым вопросом. У меня появилось необходимость перевести словесное представление числа (например: пять) в число (например: 5). В обратную сторону нашёл тучу решений, а вот так ни одного, поэтому и задал такой вот вопрос. Буду признателен за ответ и если можно пояснение, заранее спасибо.

Эта задача решается не так тривиально, как формулируется. Мне приходилось заниматься подобной задачей и в нашей команде её решали с помощью парсеров (анализаторов).
Лексический и синтаксический анализатор широко используются при создании интерпретаторов и компиляторов. Сейчас популярны так называемые PEG-анализаторы.
Я писал парсеры для C#, и мы использовали библиотеку IronMeta. Вам для Python надо будет выбрать свою библиотеку. В частности, в Google я нашёл Parsimonious, но вы лучше повыбирайте сами.
Грамматика будет выглядеть приблизительно так:

zero = "ноль"
one = "один"
two = "два"
three = "три"
...
nine = "девять"
ones = one | two | three | ... | nine
eleven = "одинадцать"
twelve = "двенадцать"
...
nineteen = "девятнадцать"
teens = elevent | ... | twelve | ... | nineteen
ten = "десять"
twenty = "двадцать"
ninety = "девяности"
tens = ten | twenty | ... | ninety
number = zero | ones | teens | tens | tens ones

В визиторе, который описан в документации на Parsimonious, надо завести аккумулятор, в который надо прибавлять значения.
visit_twenty добавит 20,
visit_nine добавит 9, итого "двадцать девять" превратится в 29.


Как удалить столбцы с типом данных object?
У меня есть df в котором 149 столбцов. Мне нужно удалить из него поля с типом данных object.
Подскажите, как это можно сделать?
вот пример df:
<code>
Sher = [None, None, None] - object
Hlop = [0.1, 0.7, None] - float
ID = [B0123 05, P0154 95, 04520 00] - object
</code>
только поля Sher и ID нужно удалить
Спасибо!

Можно воспользоваться методом
select_dtypes

df = df.select_dtypes(exclude=['object'])


Разбить строку после второй запятой
Было:

text = "Екатеринбург (г),Славинская (ул),д.17,кв.161"

Стало:

text1 = "Екатеринбург (г),Славинская (ул),"
text2 = "д.17,кв.161"

Пока не понимаю, как это можно регулярками сделать.

Вам обязательно регулярки нужны? Можно и без них довольно просто сделать:
<code>
text = "Екатеринбург (г),Славинская (ул),д.17,кв.161"
text_split = text.split(',')
text1 = ','.join(text_split[:2])
text2 = ','.join(text_split[2:])
</code>


Как при нажатии на кнопку срабатывало несколько функций. PyQt5
Только начинаю работать с PyQt5, поэтому многое не понимаю. Для приложения необходимо при нажатии на кнопку срабатывание нескольких функций, закрытие элементов и открытие необходимых по другой функции. Метод clicked.connect может принимать только 1 аргумент, поэтому не знаю как решить проблему.

class untitled(QtWidgets.QMainWindow):
def __init__(self):
    #Присоединение окна
    super().__init__()
    self.ui = Ui_Dialog()
    self.ui.setupUi(self)

    self.ui.goin.clicked.connect(self.ui.closed)
    self.ui.goin_2.clicked.connect(self.ui.closed)

Вот второй файл с функциями:

from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):

    #Работа с окном
    Dialog.setFixedSize(800, 500)
    palette = QtGui.QPalette()
    palette.setColor(QtGui.QPalette.Background, QtCore.Qt.white)
    Dialog.setPalette(palette)
    Dialog.setWindowTitle("Synaptik")

    font = QtGui.QFont()

    #Текст авторизации
    self.autorithetion = QtWidgets.QPushButton(Dialog)
    self.autorithetion.setGeometry(QtCore.QRect(250, 60, 300, 50))
    font.setFamily("Candara Light")
    font.setPointSize(35)
    self.autorithetion.setFont(font)
    self.autorithetion.setStyleSheet("background-color: rgba(0, 0, 0, 0);")

    #Кнопка Входа
    self.goin = QtWidgets.QPushButton(Dialog)
    self.goin.setGeometry(QtCore.QRect(300, 250, 200, 40))
    font.setFamily("Candara Light")
    font.setPointSize(16)
    self.goin.setFont(font)

    # Кнопка Регистрации
    self.goin_2 = QtWidgets.QPushButton(Dialog)
    self.goin_2.setGeometry(QtCore.QRect(300, 310, 200, 40))
    font.setFamily("Candara Light")
    font.setPointSize(16)
    self.goin_2.setFont(font)

    #Установка текста
    self.autorithetion.setText("Авторизация")
    self.goin.setText("Войти")
    self.goin_2.setText("Зарегистрироваться")

def closed(self):
    self.goin.close()
    self.goin_2.close()
    self.autorithetion.close()

def openned_1(self):
    self.autorithetion.show()

Если я правильно понял-то попробуйте в
lambda записать функции которые вы вызываете через кому вот таким вот образом

self.ui.goin.clicked.connect(lambda : (self.ui.closed, self.ui.openned_1))

или создать отдельную функцию которая будет вызывать остальные функции

def show():
    self.ui.closed()
    self.ui.openned_1()
self.ui.goin.clicked.connect(self.show)


c2.createTrackbar изменение параметров при движении ползунков
В реальном времени у меня отображается окно с видеокамерой. Я хочу, чтобы ползунками можно было менять значение функции cv2.threshold (в методе threshold), однако не понимаю как правильно это сделать. Ниже пример программы, в которой эти ползунки работают некорректно. Остальное же работает как надо. Менять хочу переменные thr1 и thr2.
<code>
import numpy as np
import cv2
import easyocr

def threshold(gray, thr1, thr2):
    thresh = cv2.threshold(gray, thr1, thr2, cv2.THRESH_OTSU + cv2.THRESH_BINARY)[1]
    return thresh

def text_recognition_en(file_path):
    reader = easyocr.Reader(["en"])
    result = reader.readtext(file_path, detail=0, paragraph=True)
    return result

def save_text_en(image_to_scan, count_en):
    result = text_recognition_en(image_to_scan)
    with open("result_en" + str(count_en) + ".txt", "w") as file:
        for line in result:
            file.write(f"{line}\n\n")
    file.close()

def text_recognition_ru(file_path):
    reader = easyocr.Reader(["ru"])
    result = reader.readtext(file_path, detail=0, paragraph=True)
    return result

def save_text_ru(image_to_scan, count_ru):
    result = text_recognition_ru(image_to_scan)
    with open("result_ru" + str(count_ru) + ".txt", "w") as file:
        for line in result:
            file.write(f"{line}\n\n")
    file.close()

def main():
    root_window = "main";
    cv2.namedWindow(root_window)

    # Параметры Threshold
    thr1 = 0
    thr2 = 255

    # Слайдеры для изменения параметров Threshold
    cv2.createTrackbar('threshold par 1', root_window, thr1, 255, threshold)
    cv2.setTrackbarPos('threshold par 1', root_window, 0)
    cv2.createTrackbar('threshold par 2', root_window, thr2, 255, threshold)
    cv2.setTrackbarPos('threshold par 2', root_window, 255)

    # Все параметры камеры
    cap = cv2.VideoCapture(0)
    cap.set(cv2.CAP_PROP_FPS, 24)  # Частота кадров
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)  # Ширина кадров в видеопотоке.
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)  # Высота кадров в видеопотоке.

    # img / gray / thresh / cnts / img
    count_ru = 1  # Нумерация картинок и текстов
    count_en = 1

    while True:
        ret, img = cap.read()
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        thresh = threshold(gray, thr1, thr2)

        # Поиск контуров и сортировка
        cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        cnts = cnts[0] if len(cnts) == 2 else cnts[1]
        cnts = sorted(cnts, key=cv2.contourArea, reverse=True)

        # Поиск рамки
        for c in cnts:
            x, y, w, h = cv2.boundingRect(c)
            ROI = img[y:y + h, x:x + w]
            break

        cv2.imshow(root_window, thresh)

        if cv2.waitKey(1) == ord('e'):
            cv2.imwrite('image_en' + str(count_en) + '.jpg', ROI)
            image_to_scan = 'image_en' + str(count_en) + '.jpg'
            #cv2.imwrite('image_en_thresh' + str(count_en) + '.jpg', thresh)
            save_text_en(image_to_scan, count_en)
            count_en += 1

        if cv2.waitKey(1) == ord('r'):
            cv2.imwrite('image_ru' + str(count_ru) + '.jpg', ROI)
            image_to_scan = 'image_ru' + str(count_ru) + '.jpg'
            #cv2.imwrite('image_ru_thresh' + str(count_ru) + '.jpg', thresh)
            save_text_ru(image_to_scan, count_ru)
            count_ru += 1

        if cv2.waitKey(1) == 27:  # Клавиша Esc
            break

    cap.release()
    cv2.destroyAllWindows()

if __name__ == "__main__":
    main()
</code>

Моё решение данной проблемы:
Алгоритм прост - Создаём слайдер с вызовом метода, который ничего не делает, а позицию слайдера читаем через getTrackbarPos и загружаем в нужную переменную. Выглядит это так:
<code>
# Создание Trackbar и установка дефолтного значения
cv2.createTrackbar('threshold par 1', root_window, 0, 255, nothing)
cv2.setTrackbarPos('threshold par 1', root_window, 0)

# Считывание в цикле актуального значения на Trackbar
# (эта строка должна быть в цикле, у меня это был цикл
# while true, тк я постоянно обновлял изображение с камеры)
par = cv2.getTrackbarPos('threshold par 1', root_window)

# То, где применяются у меня полученные значения
cv2.threshold(gray, par, par2, cv2.THRESH_OTSU + cv2.THRESH_BINARY)[1]

# Метод nothing
def nothing(x):
    pass
</code>
Не уверен в том, что это истинно верное решение данной проблемы, однако на мой взгляд всё логично и правильно. Надеюсь, в будущем это кому-то поможет. Отдельное спасибо моему другу, который помог с этим разобраться <З
Полезные ссылки:
Документация по Trackbar
Похожий вопрос на stackoverflow
Еще один вопрос


Python: пробел заменяется знаком "-"
Господа и дамы: прохожу курс обучения python, код проходит проверку тремя пачками данных. Суть проблемы такова: в одной из пачек данных появляются отрицательные значения, и при выводе "-" съедает необходимый по требованиям пробел:
Потрачено ккал: 336.000.
Потрачено ккал:-81.320.
Потрачено ккал: 157.500.
соответственно, хочу узнать существует ли способ избежать такого сценария?
PS добавить пробел - не выход, тест не пройдут другие две пачки данных.
<code>
print(f'Тип тренировки:{self.training_type};',
      f'Длительность:{self.duration: .3f} ч.;',
      f'Дистанция:{self.distance: .3f} км;',
      f'Ср. скорость:{self.speed: .3f} км/ч;',
      f'Потрачено ккал:{self.calories: .3f}.')
</code>

В форматировании есть флаги для чисел:

+: знак ставится для всех чисел -
'+25',
'-25'

-: для отрицательных '-', ничего для положительных -
'25',
'-25'

 (Пробел): для отрицательных '-', пробел для положительных -
' 25',
'-25'

Итого ваш код примерно такой:

print(f'Тип тренировки:{self.training_type};',
      f'Длительность: {self.duration:-.3f} ч.;',
      f'Дистанция: {self.distance:-.3f} км;',
      f'Ср. скорость: {self.speed:-.3f} км/ч;',
      f'Потрачено ккал: {self.calories:-.3f}.')


Почему удаляется объект из массива Python
Решаю вот эту кату на codewars. Задание вкратце: посчитать определитель квадратной матрицы произвольного размера. Собственно, мое решение:

def determinant(matrix):
    print('Matrix: ',matrix)

    def minor(i,m):
        #здесь специально копирую переданную матрицу, чтобы с ней ничего не случилось
        major=m.copy()
        print('Major: ',major)
        major.pop(0)
        for row in major:
            row.pop(i)
        print('Minor: ',major)
        return major

    if len(matrix)==1:
        print('Det: ',matrix[0][0])
        return matrix[0][0]

    sum=0

    for j in range(len(matrix)):
        print('Iter: ',j)
        print('Before matrix: ',matrix)
        sum+=((-1)**j)*matrix[0][j]*determinant(minor(j,matrix))#вот после этой строки удаляется элемент
        print('After matrix: ',matrix)

    print('Det: ',sum)
    return sum

и вот что получаю в логах:

Matrix:  [[1, 3], [2, 5]]
Iter:  0
Before matrix:  [[1, 3], [2, 5]]
Major:  [[1, 3], [2, 5]]
Minor:  [[5]]
Matrix:  [[5]]
Det:  5
After matrix:  [[1, 3], [5]]
Iter:  1
Before matrix:  [[1, 3], [5]]
Major:  [[1, 3], [5]]
Traceback (most recent call last):
...
line 9, in minor
    row.pop(i)
IndexError: pop index out of range

То есть, в итоге, на первой же итерации после строки
sum+=((-1)**j)*matrix[0][j]*determinant(minor(j,matrix)) у меня матрица
[[1,3],[2,5]] чудесным образом превращается в
[[1,3],[5]], при том, что внутри функции
minor я специально работаю с копией. Кто-нибудь может объяснить, как это происходит?

Так происходит, потому что на первой же итерации
def minor(i,m): возвращает
major, а
major при этом равен
Minor:  [[5]] из ваших же логов. Далее вы вызываете
determinant и передаёте результат
minor, то есть
[[5]]. После этого у вас
Matrix:  [[5]].
Решения можно придумать разные, но если вы хотите решать всё в функции
determinant, вы не должны вызывать её рекурсивно. Кроме данной проблемы, у вас также каждый раз будет обнуляться
sum.


Queue и Threading
Извиняюсь за скорее всего глупую просьбу, ну не могли бы вы мне ткнуть на мои ошибки. Python изучаю недавно, поэтому немного затрудняюсь пока что с поиском правильных решений.
Имеется вот такой код:

from queue import Queue
from threading import Thread, enumerate
import threading
from tradingview_ta import *
import xlsxwriter

workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet()

txt = open(r"C:\Users\Users\Desktop\python\text.txt", "r", encoding='utf-8')
tickers = []

def worker():
    count = 1
    for s in txt:
        tickers = s.rstrip()
        data = TA_Handler(symbol=tickers, exchange="ASCENDEX",screener="crypto",\
                          interval="1d")
        interval = data.get_analysis().interval
        ticker = data.get_analysis().symbol
        exhange = data.get_analysis().exchange

        if s:
            count += 1
            qput = q.put(interval)
            q.get(qput)
            worksheet.write(f'A{count}', interval)
            worksheet.write(f'B{count}', ticker)
            worksheet.write(f'C{count}', exchange)
            print(interval)
            q.task_done()

q = Queue()

for i in range(1, 30):
    threading.Thread(target=worker, daemon=True).start()

q.join()
workbook.close()

Пытаюсь сделать так, чтобы из файла txt брались тикеры, далее подставлялись в tickers:

data = TA_Handler(symbol=tickers, exchange="ASCENDEX",screener="crypto",
 interval="1d")

после в очередь даю задания и получаю их.
Далее в xlsx файл записываются значения в A1..... intervals
в B1........ tickers
В С1......exchange
Много статей прочитал уже о многопоточности, видимо на начальных этапах сложно усвоить все.
Подскажите пожалуйста на примере моего кода или вашего, как правильно нужно запускать многопоток, чтобы потоки между собой не перебивались и не хватались за одной и тоже одновременно.

Вопрос в том, что именно вы пытаетесь ускорить. Насколько я понимаю, основное, что тут нужно ускорять, это этот кусок, где вызываются методы
TA_Handler. Чтение из файла и запись не настолько уж тормозят, плюс к тому их довольно сложно нормально превратить в многопоточный вариант. Поэтому лучше всего вам сделать по такой схеме:

написать функцию, которая получает на вход тикеры и возвращает по ним аналитику
прочитать файл с тикерами
вызвать
multiprocessing.Pool, передав ему на вход вашу функцию и список прочтённых тикеров
проитерироваться по полученному результату, записав его в выходной файл
да, и ещё нужно не забыть обернуть основной код в отдельную функцию и сделать специальный
if с проверкой, иначе будут проблемы с многопроцессностью

Таким образом, чтение файла и запись в эксель останутся однопоточными (какими они и должны быть), а теханализ будет произведён многопроцессно, причём практически без усилий с вашей стороны.
Основной кусок кода для понимания:

from multiprocessing import Pool

# ... здесь остальные импорты

def worker(tickers):
    tickers = tickers.rstrip()
    data = TA_Handler(symbol=tickers, exchange="ASCENDEX",screener="crypto",     interval="1d")
    interval = data.get_analysis().interval
    ticker = data.get_analysis().symbol
    exhange = data.get_analysis().exchange
    return interval, ticker, exchange

def main():

    # ... здесь открытие файла и экселя

    with Pool() as pool:
       for interval, ticker, exchange in pool.map(worker, txt.readlines())
            worksheet.write(f'A{count}', interval)
            worksheet.write(f'B{count}', ticker)
            worksheet.write(f'C{count}', exchange)

   # ... здесь закрытие экселя

if __name__ == "__main__":
    main()

P.S. Ну а очередь
queue вам тут вообще не нужна.


Как вставить символ в строку через каждых 4 символа в ней? Python
Всем здравствуйте, пишу программу на python, которая спрашивает у пользователя его номер карты, который я методом
replace превращаю в строку с 16 элементами, хотелось бы через каждых 4 элемента вставлять пробел, чтобы номер был читабельнее
Как из
'1234123412341234' получить
'1234 1234 1234 1234' ?

С помощью срезов, например:
<code>
number = '1234123412341234'
number_ = ' '.join(number[i*4:(i+1)*4] for i in range(4))
print(number_)
# 1234 1234 1234 1234
</code>


Numba делает вычислительные ошибки
Я недавно узнал про библиотеку Numba для ЯП Python, чтобы ускорять программу за счёт компиляции функций. Как только я установил её, я сразу решил опробовать код, который вычисляет факториал 999.
<code>
from numba import njit, prange

@njit(parallel=True)
def main():
    s = 1
    for i in prange(1, 1000):
        s *= i
    print(s)
main()
</code>
Однако, на выходе я неожиданно получал 0! Я попробовал с 99 - та же история. Решил с 9 и всё нормально. По идее, данный код должен более чем работать (никаких структур, которые Numba не понимает нету), однако, результат неадекватен от слова совсем. Пожалуйста, объясните, что могло пойти не так. Кроме ЯП Python, так уж вышло, я не знаю, поэтому если проблема связана со стороны C, распишите так, чтобы было понятно тому, кто никогда не сталкивался с низкоуровневыми конструкциями. Спасибо!

Хм, а вы представляете себе, что 999! которое вы пытаетесь вычислить -  это число с 2565 десятичными цифрами. И даже 99! -  имеет в своем представлении 154 цифры.
Рискну его здесь записать:
<code>
9426890448883247745626185743057242473809693764078951663494238777294707070023223798882976159207729119823605850588608460429412647567360000000000000000000000
</code>
Такое число в компьютере "просто так" представить невозможно, а уж работать и подавно. Да, в базовом Python теоретически можно представить целое число с (почти) неограниченным числом десятичных цифр, вот только другие пакеты с такими числами работать не будут.


Зачем делать telegram бота на Python через VDS если есть GoogleScript и Webhook? [закрыт]

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

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

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

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

Имею опыт создания телеграмм ботов которые работают через вебхук, код пишется на гугл скрипте и + гугл таблицы используются как БД если боту нужно что ни будь хранить.
Хочу изучить Python, в том числе попробовать написать бота уже на нем, но как я понял используется некий vds сервер чтобы он работал 24/7, и как я понял они есть либо пробные версии либо платные.
Так вот вопрос, что такого может бот написанный на питоне, чего не может бот написанный на гугл скрипте? Можно ли бота на питоне тоже написать через вебхук? В чем преимущество vds?

Нельзя дать хороший ответ на такой вопрос.
Основная проблема Apps Script в "платформозависимости" и низкой пропускной способности канала. Это связано с тем, что скрипты предполагают работу с сервисами Гугл, а не реализацию внешних сервисов, хотя, при малой нагрузке это реально. Пропускная способность по числу одновременных соединений также ограничена в целях безопасности.
Решение. Вы можете не использовать VDS и использовать Таблицы, при этом изучая Python. Для этого просто опубликуйте своего бота как сервис в Container to production или как Cloud Function. Оба сервиса будут масштабироваться, потреблять в сотни раз меньше чем VDS. Продолжайте использовать Таблицы как базу данных, только помните, что общее число обращений к сервису Google Sheets без увеличения квот ограничено 100 запросами в секунду на проект. Ну, и Таблицы отвечают немного дольше, чем база данных в вашей сети. Это будет работать на хуках.
Ответы типа "нравится - не нравится" для красавиц, которым придется терпеть и есть, что дадут.


Вывод в поле ввода текста другой программы
Есть код (Speech to text) и он работает в командной строке и при преобразовании речи в текст вывод текста так же остаётся в командной строке , но мне нужно чтоб он писался в поле ввода текста в котором я нахожусь , то-есть в поисковую строку в браузере или же в мессенджер в поле набора сообщения , так же как это реализовано в windows speech to text при нажатии win+h, как реализовать это в этом коде ?
Python 3.8
<code>
import sounddevice as sd
import vosk, queue, json

q = queue.Queue()

devices = sd.query_devices()
print("Select device id: \n", devices)

dev_id = 0

try:
    dev_id = int(input())
except ValueError:
    print("Using default value: 0")

samplerate = int(sd.query_devices(dev_id, 'input')['default_samplerate'])

try:
    model = vosk.Model("model")
    with sd.RawInputStream(samplerate=samplerate, blocksize=8000, device=dev_id, dtype='int16', channels=1, callback=(lambda i, f, t, s: q.put(bytes(i)))):
        rec = vosk.KaldiRecognizer(model, samplerate)
        while True:
            data = q.get()
            if rec.AcceptWaveform(data):
                data = json.loads(rec.Result())["text"]
                print(data)

except KeyboardInterrupt:
   print('\nDone')
</code>

Единственный простой вариант решения как по мне - использовать модуль
keyboard:

keyboard.add_hotkey(hotkey, func) - вставляете в свой код и
hotkey заменяете на строку с вашими горячими клавишами,
func заменяете на вашу функцию
translator где будет ваше преобразования речи в текст.

keyboard.write(text) - заменяете
print  на эту функцию и text на текст который будет выведен.
Идея такова: Нажимая хоткей запускалась ф-ция преобразования речи в текст и с помощью
keyboard.write имитировала нажатия на клавиатуру с вашим текстом, то есть для этого пользователь должен удерживать курсор на на нужном текст-инпуте.


Рекурсивная функция. Поиск путей файлов во множесте папок
Хочу просканировать директорию с неопределённым количеством поддиректорий, и вывести список путей ко всем файлам.

import os
def path_cheker(dir):
    file_list=[]
    for item in os.listdir(dir):
        full_path=os.path.join(dir,item)
        if os.path.isdir(full_path):  #Если item это папка, захит и сканирует её
            path_cheker(full_path)
        elif os.path.isfile(full_path):
            file_list.append(full_path)
    return file_list

task_dir="movie_analis\\task"
print(path_cheker(task_dir))

Выводит пустой список...:

[]

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

import os
def path_cheker(papka, result_list=None):
    if result_list==None:
       result_list=[]
    for item in os.listdir(papka):
        full_path=os.path.join(papka,item)
        if os.path.isdir(full_path):
            path_cheker(full_path)
        elif os.path.isfile(full_path):
            result_list.append(full_path)
    return result_list

task_dir="movie_analis\\task"
path_cheker(task_dir)

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

def path_cheker(dir, file_list=None):
    if file_list is None:
        file_list=[]
    for item in os.listdir(dir):
        full_path=os.path.join(dir,item)
        if os.path.isdir(full_path):
            path_cheker(full_path, file_list)
        elif os.path.isfile(full_path):
            file_list.append(full_path)
    return file_list

Обратите внимание, что нельзя использовать в питоне в качестве дефолтных параметров коллекции, например так
file_list=[]. Почему - этот вопрос много раз тут обсуждался, я не буду повторяться. Ну то есть использовать конечно можно, но поведение функции будет не такое, как ожидается.
Кроме того, хорошо бы поменять название переменной
dir на, скажем,
path, потому что
dir - это встроенная функция питона. Перекрывать встроенные функции нехорошо.


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

test x1
test1 x1
test2 x4

Но получается так:

[['test'], ['test1'], ['test2']] x[1, 1, 4]

Как сделать то, что мне нужно?

@bot.command(aliases=["inv", "инвентарь"])
async def inventory(ctx, member: discord.Member = None):
    if member == None:
        member = ctx.author
    with open(f"{member.id}.json", "r") as write_file:
        data = json.load(write_file)
    invItem = data["item"]
    invAmount = data["amount"]

    embed = discord.Embed(title=f"Инвентарь {member}", description=f"Инвентарь:\n{invItem} x{invAmount}")
    await ctx.send(embed=embed)

invItem, invAmount = [['test'], ['test1'], ['test2']], [1, 1, 4]
# я вот это имел ввиду ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# потому, что этот ответ верен для набора данных вот в таком формате
# Кроме того если количество элементов в списках invItem и invAmount будет разным,
# то лучше использовать zip_longest
items_str = '\n'.join(f'{ii} x{ia}' for (ii,), ia in zip(invItem, invAmount))
print(items_str)

test x1
test1 x1
test2 x4


Как добавить значение в переменную внутри словаря?
У меня есть словарь и json. Мне нужно, чтобы при вводе команды(где item = test), словарь не перезаписывался, а дополнялся. Вот, что я хочу получить:

data = {
        "item": "tester", "test", #tester - это предмет, который был, а test - предмет, который добавлен
        "amount": "1", "1"
    }

Вот мой говнокод:

    inv = {
        "item": "",
        "amount": ""
    }
    with open(f"file.json", "r") as write_file:
        data = json.load(write_file)
    with open(f"file.json", "w") as write_file:
        #Пытался сделать
        inv["item"] = item
        inv["amount"] =  num
        inv["item"] + data["item"]
        json.dump(inv, write_file) #Сохранение

Таким образом объединить данные по одному ключу нельзя, зато можно создать вместо словаря inv список и добавлять туда словари вида
{"item": x, "amount": y} в блоке
with open(f"file.json", "w"), либо поместить по ключам списки и добавлять значения уже туда методом .append() в том же блоке
with, что-то вроде такого:
{"item": [x, y], "amount": [11, 22]}


Как изменять график по нажатию на кнопку
В проекте должна быть реализована программа для построения графика функции y = 5 / x + 4, x берется из Scale, а управление работой программы через Button, цвет графика D2691E
<code>
from tkinter import *

from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np

def func():
    x = []
    y = []
    for i in np.arange(0, 3, 0.01):
        x.append(i)
        y.append(5 / var.get() + 4)
    plt.plot(x, y, color = '#D2691E')

tk = Tk()

tk.title('')
tk.geometry("700x500")

btn = Button(master = tk, text = 'change', command = func)
btn.pack()

fig = Figure(figsize = (10, 4))

plt = fig.add_subplot()

canvas = FigureCanvasTkAgg(fig, master = tk)
canvas.draw()
canvas.get_tk_widget().pack()

var = DoubleVar()
scale = Scale(tk, orient = HORIZONTAL, variable = var)
scale.pack()

tk.mainloop()
</code>

Я изначально не правильно подошёл к этому вопросу надо было создавать график и при нажатии проверять есть ли у нас график если есть то удалять и создать новый
<code>
from tkinter import *
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np

def graph():
    global canvas
    if canvas:
        canvas.get_tk_widget().destroy()

    r = var.get()
    x1 = np.linspace(-r, 0)
    x2 = np.linspace(0, r)
    y = lambda x : 5 / x + 4

    fig = Figure()
    ax = fig.add_subplot()
    ax.plot(x1, y(x1), color = '#D2691E')
    ax.plot(x2, y(x2), color = '#D2691E')

    canvas = FigureCanvasTkAgg(fig, master = tk)
    canvas.draw()
    canvas.get_tk_widget().pack()

tk = Tk()
tk.geometry("700x500")

btn = Button(master = tk, text = 'change', command = graph)
var = DoubleVar()
scale = Scale(tk, orient = HORIZONTAL, variable = var)
btn.pack()
scale.pack()

canvas = None
graph()

tk.mainloop()
</code>


Как остановить функцию if? (строка 24)
Как остановить функцию if? То-есть если условие выполняется,то программа завершает работу.
И,пожалуйста,если не трудно оцените написанный код, я только учусь.
Суть задания : Играют два игрока.  Есть 10 палочек. Игроки по очереди берут от одной до трёх палочек. Играют до тех пор пока не закончатся палочки. Тот кто взял последним - тот проиграл.
<code>
palochki = int(10)
"""первый ход"""
player1 = print('Игрок 1: Уберите от 1 до 3 палочек: ')
hod1 =(int(input()))
result1 = print('Осталось палочек : ')
result2 = print(palochki - hod1)
palochki2= palochki - hod1

"""второй ход"""
player2 = print("Игрок 2 : Уберите от 1 до 3 палочек")
hod2 =(int(input()))
result3 = print('Осталось палочек : ')
result4 = print(palochki2 - hod2)
palochki3 = palochki2 - hod2
"""третий ход"""

player1 = print('Игрок 1: Уберите от 1 до 3 палочек: ')
hod3=(int(input()))
result5 = print('Осталось палочек :')
result6 = print(palochki3 - hod3)
palochki4 = palochki3 -hod3
"""четвёртый ход"""
player2 = print("Игрок 2 : Уберите от 1 до 3 палочек")
hod4=(int(input()))
if hod4 >= palochki4:
    print("Игрок 2 : Вы проиграли")
else:
    result7 = print("Осталось палочек :")
result8 = print(palochki4 - hod4)
palochki5 = palochki4 - hod4

"""пятый ход"""
player1 = print("Игрок 1 : Уберите от 1 до 3 палочек")
hod5=(int(input()))
if hod5 >= palochki5:
    print("Игрок 1 : Вы проиграли")
else:
    result9 = print("Осталось палочек :")
result10 = print(palochki5 - hod5)
palochki6 = palochki5 - hod5
"""шестой ход"""
player2 = print("Игрок 2 : Уберите от 1 до 3 палочек")
hod6=(int(input()))
if hod6 >= palochki5:
    print("Игрок 2 : Вы проиграли")
else:
    result11 = print("Осталось палочек :")
result12 = print(palochki6 - hod6)
palochki7 = palochki6 - hod6
"""седьмой ход"""

player1 = print("Игрок 1 : Уберите от 1 до 3 палочек")
hod7=(int(input()))
if hod7 >= palochki7:
    print("Игрок 1 : Вы проиграли")
else:
    result13 = print("Осталось палочек :")
result14 = print(palochki7 - hod7)
palochki8 = palochki7 - hod7

"""восьмой ход"""
player2 = print("Игрок 2 : Уберите от 1 до 3 палочек")
hod8=(int(input()))
if hod8 >= palochki8:
    print("Игрок 2 : Вы проиграли")
else:
    result15 = print("Осталось палочек :")
result16 = print(palochki8 - hod8)
palochki9 = palochki8 - hod8
"""девятый ход"""

player1 = print("Игрок 1 : Уберите от 1 до 3 палочек")
hod9=(int(input()))
if hod9 >= palochki9:
    print("Игрок 2 : Вы проиграли")
else:
    result17 = print("Осталось палочек :")
result18 = print(palochki9 - hod9)
palochki10 = palochki9 - hod9

"""десятый ход"""
player2 = print("Игрок 2 : Уберите от 1 до 3 палочек")
hod10=(int(input()))
if hod10 >= palochki10:
    print("Игрок 2 : Вы проиграли")
else:
    result19 = print("Осталось палочек :")
result20 = print(palochki10 - hod10)
</code>

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

palochki = 10

def count_chek(count: int) -> bool:
    if 0 < count and count <= 3:
        return True
    return False

while palochki > 0:
    # первый игрок
    player1_flag = True
    while player1_flag:
        player1 = print('Игрок 1: Уберите от 1 до 3 палочек: ')
        count_player1 = int(input())
        if count_chek(count_player1):
            palochki = palochki - count_player1
            if palochki <= 0:
                print("Игрок 1 проиграл")
                break
            else:
                result = print(f'Осталось палочек : {palochki}')
                player1_flag = False

    player2_flag = True
    while player2_flag:
        player2 = print('Игрок 2: Уберите от 1 до 3 палочек: ')
        count_player2 = int(input())
        if count_chek(count_player2):
            palochki = palochki - count_player1
            if palochki <= 0:
                print("Игрок 2 проиграл")
                break
            else:
                result = print(f'Осталось палочек : {palochki}')
                player2_flag = False

Вот метод решения через класс и остановка игры при вводе 0.

import sys

class Palochki:
    def __init__(self) -> None:
        self.palochki = 10
        self.player_hod = True
        self.player1_count = 0
        self.player2_count = 0

    def count_chek(self, count: int) -> bool:
        if 0 < count and count <= 3:
            return True
        if count == 0:
            print('Выход')
            sys.exit()
        return False

    def __player_hod(self, player_name: str) -> None:
        while True:
            print(f'{player_name}: Уберите от 1 до 3 палочек: ')
            count = int(input())
            if self.count_chek(count):
                self.palochki = self.palochki - count
                if self.palochki <= 0:
                    print(f"{player_name} проиграл")
                else:
                    print(f'Осталось палочек : {self.palochki}')
                return

    def start(self) -> None:
        while self.palochki > 0:
            self.__player_hod("Игрок 1")
            if self.palochki == 0:
                break
            self.__player_hod("Игрок 2")
        print('Выход')
        sys.exit()

Palochki().start()


Функция возвращающая список, состоящий из элементов двух списков
Всем привет.
Есть два списка:

my_list_a = [1, 2, 3]
my_list_b = [11, 22, 33]

Для них нужна функция, которая будет принимает в качестве аргументов эти два списка, а возвращает список, состоящий из элементов этих двух списков, при чем первый элемент списка - первый элемент первого аргумента, второй элемент списка - первый элемент второго списка, третий элемент - второй элемент первого списка, четвертый - второй элемент второго аргумента и т.д.
т.е для аргументов [1, 2, 3] и [11, 22, 33] функция должна вернуть:

new_list = [1, 11, 2, 22, 3, 33]

Приложение моей попытки:

my_list_a = [1, 2, 3]
my_list_b = [11, 22, 33]

def list_gen(my_list_a, my_list_b):
 combined_list = [my_list_a, my_list_b]
 new_list = [i for sublist in combined_list for i in sublist]
 return new_list

print(list_gen(my_list_a, my_list_b))

Выводит:

new_list = [1, 2, 3, 11, 22, 33]

Возможно надо добавить логику в функцию или для это задачи подойдет генераторов последовательностей?
Начал изучать программирование недавно, многих вещей еще не знаю. Буду благодарен, если кто-то объяснит как сделать то, что мне нужно или хотя-бы даст ссылку где можно почитать на тему вопроса. Заранее спасибо.

Для параллельного перебора двух и более списков в питоне наиболее удобно использовать функцию
zip. Фактически, нужно просто добавить к вашему коду в нужном месте вызов этой функции (ну и там ещё скобки поменять), и ваш код будет выдавать то, что нужно.


Форматирование даты datetime
Есть дата '24.05.2022' нужно перевести её в формат '2022.05.24'

import datetime as dt
date = '24.05.2022'
print(dt.datetime.strptime(date, "%Y.%m.%d").date())

После выполнения кода получаю ошибку

ValueError: time data '24.05.2022' does not match format '%Y.%m.%d'

Уже не понимаю в чем может быть причина. Как это сделать более практично?

import datetime as dt

date = '24.05.2022'
date = dt.datetime.strptime(date, "%d.%m.%Y")

new_date = date.strftime("%Y.%m.%d")
print(new_date)
# 2022.05.24


Перестаёт работать OpenCV после установки EasyOCR
Используя OpenCV всё было хорошо. С его помощью работал с видеокамерой и обрабатывал изображение. Никаких ошибок не было. Появилась необходимость поставить EasyOCR для дальнейшего распознавания текста на обработанном изображении, но после его установки OpenCV показывает ошибки на каждую строку кода с его участием.
Пробовал устанавливать в разных порядках, но ничего не меняется. Проблема появляется ИМЕННО после установки EasyOCR, в коде ничего не меняется.
Пример ошибки:

Traceback (most recent call last):
  File "C:/Users/Roman/PycharmProjects/test2105/main.py", line 17, in <module>
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(4.5.4) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

Они всегда схожи по последней строчке ошибки, меняется только линия кода. Использую Pyharm. Устанавливал через терминал:

pip3 install opencv-python
pip3 install easyocr

На всякий случай вот весь код программы:

import numpy as np
import cv2
import easyocr

# Все параметры камеры
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FPS, 24) # Частота кадров
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) # Ширина кадров в видеопотоке.
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) # Высота кадров в видеопотоке.

# img / gray / thresh / cnts / img

while True:
    ret, img = cap.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY)[1]

    # Поиск контуров и сортировка
    cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    cnts = cnts[0] if len(cnts) == 2 else cnts[1]
    cnts = sorted(cnts, key=cv2.contourArea, reverse=True)

    # Поиск рамки
    for c in cnts:
        x, y, w, h = cv2.boundingRect(c)
        ROI = img[y:y + h, x:x + w]
        break

    cv2.imshow('ROI', thresh)
    cv2.imwrite('ROI.png', thresh)

    if cv2.waitKey(10) == 27: # Клавиша Esc
        break
cap.release()
cv2.destroyAllWindows()

Мною было выяснено, что EasyOCR и OpenCV действительно имеют проблемы в работе друг с другом. Решением стала установка определенной версии OpenCV
<code>
pip install opencv-python==4.5.4.60
</code>
Ошибки пропали, программа заработала.


Django. Перевод значений в верхний регистр при создании объекта модели
У меня есть модель, которая хранит в себе полное и краткое название криптомонеты. Название монет - это уникальное значение, которое не может повторятся. Однако когда я зашёл в админ-панель и попытался создать монету, я заметил, что могу создать две одинаковых монеты:
btc и
BTC.
Я понимаю, что для
django - это разные названия из-за регистра, поэтому она допускает их создание. Хотелось бы узнать, как можно решить эту проблему.
Я пытался решить эту проблему на моменте описания полей модели. Я создал класс, который наследуется от
CharField, но я не понимаю, где мне надо менять регистр.
Также я попытался изменить метод
save, но при добавлении похожей записи
django выкидывает исключение
IntegrityError, хотя без переопределения этого метода, в интерфейсе админ-панели появлялось сообщение "Это название уже есть".

models.py:

class CryptoCoin(models.Model):
    full_name = models.CharField(max_length=32, unique=True)
    short_name = models.CharField(max_length=5, unique=True)

def __str__(self) -> str:
    return self.short_name

Можно переопределить метод
save таким образом:

class CryptoCoin(models.Model):
        full_name = models.CharField(max_length=32, unique=True)
        short_name = models.CharField(max_length=5, unique=True)

        def save(self, *args, **kwargs):
            self.short_name = self.short_name.upper()
            return super(CryptoCoin, self).save(*args, **kwargs)

Так же, как вариант, можно попробовать переопределить
field модели:

class UpperField(models.CharField):
    def __init__(self, *args, **kwargs):
        super(UpperField, self).__init__(*args, **kwargs)

    def get_prep_value(self, value):
        return str(value).upper()

class CryptoCoin(models.Model):
        full_name = models.CharField(max_length=32, unique=True)
        short_name = UpperField(max_length=5, unique=True)


Нужно получить следующее за найденным слово
Из 1С получены данные.
Мне нужно вынуть данные для бота по каждому действующему счетчику. Например, по номеру счетчика получается только первое значение

Результат:
{
    "dataType": "data_for_bot",
    "data": [
        {
            "balance": 657.26
        },
        {
            "fullName": «Сидоров И.П.»
        },
        {
            "metersData": [
                {
                    "serialNumber": "738362",
                    "unit": "куб.м.",
                    "name": "гор.вода",
                    "state": "Действует",
                    "id": "496703a4-0668-11ec-8102-00155d393ce6",
                    "lastReading": "14,12",
                    "lastReadingDate": "28.02.2022 0:00:00",
                    "scale": "0",
                    "meterType": "hotWater",
                },
                {
                    "serialNumber": "00507723",
                    "unit": "куб.м.",
                    "name": "горячая вода  ",
                    "state": "Не действует",
                    "id": "36a7b4a3-b9b1-11e9-80e6-00155de4bdf6",
                    "lastReading": "20",
                    "lastReadingDate": "30.06.2021 0:00:00",
                    "scale": "0",
                    "meterType": "hotWater",
                },
                {
                    "serialNumber": "8091855",
                    "unit": "",
                    "name": "горячая вода",
                    "state": "Не действует",
                    "id": "2c84bfa1-87fd-11e3-8ac8-000476f87573",
                    "lastReading": "383",
                    "lastReadingDate": "26.07.2019 0:00:00",
                    "scale": "0",
                    "meterType": "hotWater",
                },
                {
                    "serialNumber": "00505818",
                    "unit": "куб.м.",
                    "name": "холодная вода ",
                    "state": "Действует",
                    "id": "1bb4d89b-b9b1-11e9-80e6-00155de4bdf6",
                    "lastReading": "346",
                    "lastReadingDate": "27.01.2022 0:00:00",
                    "scale": "0",
                    "meterType": "coldWater",
                },
                {
                    "serialNumber": "01538380",
                    "unit": "",
                    "name": "электросчетчик",
                    "state": "Действует",
                    "id": "b87bcaec-8800-11e3-8ac8-000476f87573",
                    "lastReading": "37 310",
                    "lastReadingDate": "18.05.2022 0:00:00",
                    "scale": "6",
                    "meterType": "electricity",
                }
            ]
        }
    ]
}

Код:

page = page1с.split()
water = '"serialNumber":'
for w in page:
    n = w.find(water)
    index_v = -1
    if n != -1:
        index_v = page.index(water)
        number_water = page[index_v + 1]
        print('Номер счетчика: '  + number_water)```

Вывод:

Номер счетчика: 738362,
Номер счетчика: 738362,
Номер счетчика: 738362,
Номер счетчика: 738362,

<code>
data = {"data": [
        {"metersData": [
                {
                    "serialNumber": "738362",
                    "state": "Действует",
                    "lastReading": "259,12",
                    "lastReadingDate": "28.02.2022 0:00:00"
                },
                {
                    "serialNumber": "738014",
                    "state": "Действует",
                    "lastReading": "296,12",
                    "lastReadingDate": "28.02.2022 0:00:00"
                },
                {
                    "serialNumber": "83781910",
                    "state": "Не действует",
                    "lastReading": "9,395",
                    "lastReadingDate": "30.04.2014 0:00:00"
                },
                {
                    "serialNumber": "728380",
                    "state": "Действует",
                    "lastReading": "256,08",
                    "lastReadingDate": "28.02.2022 0:00:00"
                }]}]}

result = []

for i in data.get('data')[0].get('metersData'):
    if i.get('state') == 'Действует':
        number = i.get('serialNumber')
        last_reading = i.get('lastReading')
        last_reading_date = i.get('lastReadingDate')
        result.append(f'Номер счетчика: {number}\nПоследние показания: {last_reading}\nДата последнего чтения: {last_reading_date}')

print(result)
</code>
['Номер счетчика: 738362\nПоследние показания: 259,12\nДата последнего чтения: 28.02.2022 0:00:00', 'Номер счетчика: 738014\nПоследние показания: 296,12\nДата последнего чтения: 28.02.2022 0:00:00', 'Номер счетчика: 728380\nПоследние показания: 256,08\nДата последнего чтения: 28.02.2022 0:00:00']


Как сделать проверку на роль пользователя?

@command(name="+хелп")
async def adm(self, ctx, member=None):
    user = await self.bot.get_user(ctx.from_id)
    adm = await basa.register.main.chekc_adm(user)
    mem = re.findall(f"[0-9]+", member)[0]
    print(mem is self.my_awesome_dict[2] == 'Хелпер')
    if member is None:
        await ctx.send("Перешлите сообщение или укажите айди пользователя")
    if member is self.my_awesome_dict[2] == adm:
        await ctx.send("Пользователь имеет данную роль")
    elif self.my_awesome_dict[6] >= adm:
        mem = re.findall(f"[0-9]+", member)[0]
        await ctx.send(format(user.first_name) + ", выдал роль администратора пользователю " + "@id" + format(str(mem)))
        await basa.register.main.adm(int(mem))
    else:
        await ctx.send("Не достаточно прав")

Как сделать проверку на наличие роли пользователя кому пытаешься выдать роль?

if member is self.my_awesome_dict[2] == adm:
        await ctx.send("Пользователь имеет данную роль")

self.my_awesome_dict[2] - это роль хелпер

if self.my_awesome_dict[2] in member.roles:
    await ctx.send("Пользователь имеет данную роль")


Построчно считать последовательность цифр из файла и вывести на экран самую длинную возрост. послледовательность
Задача
Программа считывает последовательность цифр из файла(построчно) и выводит на экран самую длинную возрастающую последовательность, ее длину и позицию
Проблема
Код почему-то просто выводит последний элемент

import fileinput, time,os,psutil,re

start_time = time.time()
lst = []
s,l,n = ' '*3
# СЧитаем файл
with fileinput.FileInput('111.txt') as file:
    for line in file:
            for i in re.findall(r'\d+', line):
                lst.append(i)
    # Находим самую длинную последовательность
    for number, i in enumerate(lst):
        buff = 0
        for j in i:
            if int(j) > buff:
                buff = int(j)
                s = i
                l = len(i)
                n = number + 1
            else:
                break

print(f'Введенные значения- {lst}\n'
      f'Самая длинная восх. посл. - {s}\n'
      f'Длинна последовательности - {l}\n'
      f'Номер последовательности - {n}')

Значения в файле:

1 2  3 44 45 4 5 6 6 7
1 2 3 4 5e 9 1 й ц у к 22222222222
й ц у к 4 5 6 913 4 5 7 67898 456 4 12 6 7 4 2 123456789 4 5

У меня выводит

Введенные значения- ['1', '2', '3', '44', '45', '4', '5', '6', '6', '7', '1', '2', '3', '4', '5', '9', '1', '22222222222', '4', '5', '6', '913', '4', '5', '7', '67898', '456', '4', '12', '6', '7', '4', '2', '123456789', '4', '5']
Самая длинная восх. посл. - 5
Длинна последовательности - 1
Номер последовательности - 36

Починил - " почему-то " объясняется тем, что у вас вообще нигде не запоминается эта длинная последовательность, да и сравнения не видно. Запоминается же что-то странное. Вы проверяете исключительно возрастание внутри последовательности.
Поэтому запоминаем ниже все последовательности возрастающие, а в конце самую длинную берем. Смотрите комментарии.
<code>
import fileinput, time,os,re

start_time = time.time()
lst = []
# СЧитаем файл
with fileinput.FileInput('111.txt') as file:
    for line in file:
            for i in re.findall(r'\d+', line):
                lst.append(i)
    # Список возрастающих последовательностей
    list1 = []
    # Находим самую длинную последовательность
    for number, i in enumerate(lst):
        temp_s=''
        fl = True
        buff = 0
        # Проверяем только если больше одного символа
        if len(i) > 1:
            for j in i:
                if int(j) > buff:
                    # Накапливаем последовательность
                    temp_s += j
                    buff = int(j)
                else:
                    # Не возрастающая последовательность
                    fl= False
                    break
            # Запомнили последовательность и её номер
            if fl:
                list1.append((temp_s, number + 1))
# Находим самую длинную последовательность
longest=max(list1, key=lambda i: len(i[0]))

print(f'Введенные значения- {lst}\n'
      f'Самая длинная восх. посл. - {longest[0]}\n'
      f'Длина последовательности - {len(longest[0])}\n'
      f'Номер последовательности - {longest[1]}')
</code>


Махинация со строками и списками
Всем привет.
Тут такая задачка возникла.
Пользователь вводит строку как в калькулятор: 123+500+456 не важно. И надо сделать вот что.
Раздробить строку с помощью
input = list(input), и получаем ['1','2','3','+','5' ...]. И сделать так, чтобы пройтись по этому списку и соединить то, что относиться к числам, а операторы сложения(-,*,/ и т.д) оставить. Получается: ['123','+','500' ...].
 Как это реализовать или есть примерно похожий альтернативный способ решения задачи.

Вот решение "в лоб".
Для тестовой строки: s='123+56+244/34-57*26'
получаем ['123', '+', '56', '+', '244', '/', '34', '-', '57', '*', '26']
<code>
s = input ()
# Кортеж для проверки на соответствие
mas= ('+','-','/','*')
# Финальный список
list1=[]
# переменная для накопления числа в строковом виде
s_temp=''
# Идем посимвольно по всей строке
for symbol in s:
    # Если символ оператора, то запишем в список накопленное число и оператор
    if symbol in mas:
        list1.append(s_temp)
        list1.append(symbol)
        # "Обнулим" накопленную строку
        s_temp = ''
    # Не оператор - накапливаем строку
    else:
        s_temp += symbol
# Записываем последнюю накопленную строку
list1.append(s_temp)
print (list1)
</code>


Каким образом сделать вывод текста после нажатия кнопки в dearpygui?
Есть вот такой код, каким образом мне сделать вывод текста из main_txt после нажатия кнопки btn
<code>
import dearpygui.dearpygui as dpg

dpg.create_context()
dpg.create_viewport(title='Custom Title', width=800, height=300)

with dpg.window(label='Main Window'):
    main_txt = dpg.add_input_text()
    btn = dpg.add_button(label='Start', tag=99)

dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
</code>

Воспользуйтесь аргументом
callback при создании кнопки.
Короткий пример без инициализации dearpygui:

def btn_pressed(sender, app_data, user_data):
    print(sender, app_data, user_data)

dearpygui.add_button(tag="button", label="I print all my data", user_data="your args for callback", callback=btn_pressed)

Подробнее можете посмотреть в документации по созданию кнопок и по item callback.


Python вывод строки с точным совпадением
Вы не могли бы мне подсказать , как я могу сохранить в переменную, нужную строчку из файла содержащую только нужное мне слово
Условно говоря есть такой код:

import random
import re

str(input(""))
sub_string = 'AAA'

file = open(r'C:\Users\W\Desktop\python\1.txt', 'r')

lines = file.readlines()

for line in lines:
    if sub_string in line:
        print(line)

file.close()

где file содержит список:

ABC:AAA11
CAB:AAA22
BGG1:AAA
BGG2:AAA
BGG3:AAA
BGG4:AAA

в sub_string содержится то, что будет введено в input
далее в переменную сохранить строчку из файла, только содержащую целое слово, в данном примере 'AAA'. Если в файле содержится несколько строк содержащих AAA,то пусть выводится рандомное из всех подходящих.
исходя из списка в файла, в переменную должно быть выведено одно из:

BGG1:AAA
BGG2:AAA
BGG3:AAA
BGG4:AAA

Все строки соберите в список из которого выберите случайную строку.
Из всех строк надо удалить концы (
strip), разбить из по двоеточиям, последний фрагмент сравнить с искомым:

search = 'AAA'

found = [line for line in file if search == line.strip().split(':')[-1]]
print(found)
if found:
    print(random.choice(found))


Как прогнать кадры с камеры через нейросеть?
Как сделать "прогон" кадров с веб камеры (функция
camera_on,
а также
control_timer) через нейросеть (функция
network)?

class PredictNumber:
    face_cascade = cv2.CascadeClassifier('cascade/haarcascade_russian_plate_number.xml')

    def network(self, image_video):
        ret, frame = image_video.read()
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        plaques = face_cascade.detectMultiScale(gray, 1.3, 5)
        for i, (x, y, w, h) in enumerate(plaques):
            roi_color = frame[y:y + h, x:x + w]
            r = 400.0 / roi_color.shape[1]
            dim = (400, int(roi_color.shape[0] * r))
            resized = cv2.resize(roi_color, dim, interpolation=cv2.INTER_AREA)
            w_resized = resized.shape[0]
            h_resized = resized.shape[1]
            frame[100:100 + w_resized, 100:100 + h_resized] = resized
        return resized

    def camera_on(self):
        ret, image = self.cap.read()
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
        height, width, channel = image.shape
        step = channel * width
        img = QImage(image.data, width, height, step, QImage.Format_RGB888)
        image_video = PredictNumber.network(self, img)
# Таким образом не работает,
происходит вылет программы.
        self.ui.Cam.setPixmap(QPixmap.fromImage(image_video))
        self.ui.Cam.setScaledContents(True)

    def control_timer(self):
        if not self.timer.isActive():
            self.cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
            self.timer.start(0)

UPD: Переписал и вынес в отдельный класс камеру
Чтобы не париться с переводом форматов из cv в QT
image сделал вот так, добавил каскад, однако все равно происходит вылет программы:

class Worker1(QThread):
    ImageUpdate = pyqtSignal(QImage)
    face_cascade = cv2.CascadeClassifier('cascade/haarcascade_russian_plate_number.xml')
    def run(self):
        self.ThreadActive = True
        Capture = cv2.VideoCapture(0)
        while self.ThreadActive:
            ret, frame = Capture.read()
            if ret:
                image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                flipped_image = cv2.flip(image, 1)
                with_cascade = faceCascade.detectMultiScale(flipped_image, 1.3, 7)
                for (x, y, w, h) in with_cascade:
                    roi_color = ret[y:y + h, x:x + w]
                    r = 300.0 / roi_color.shape[1]
                    dim = (400, int(roi_color.shape[0] * r))
                    resized = cv2.resize(roi_color, dim, interpolation=cv2.INTER_AREA)
                convert_to_qt_format = QImage(resized.data, resized.shape[1], fresized.shape[0], QImage.Format_RGB888)
                self.ImageUpdate.emit(convert_to_qt_format)

Здесь происходит инициализация класса, а также его запуск по нажатии кнопки.

        self.Worker1 = Worker1()
        self.Worker1.ImageUpdate.connect(self.image_update_slot)
        self.ui.Camera_btn.clicked.connect(self.Worker1.start)

А это уже слот для обновления камеры. Последняя строчка делает размер камеры в соответствии с виджетом

    def image_update_slot(self, Image):
        self.ui.Cam.setPixmap(QPixmap.fromImage(Image))
        self.ui.Cam.setScaledContents(True)

Попробуйте заменить класс
Worker1:

class Worker1(QThread):
    ImageUpdate = pyqtSignal(QImage)

    def __init__(self, *args, **kwargs):
        super().__init__()
        self.ThreadActive = True
        self.cam = cv2.VideoCapture(0)

    def run(self):
        while self.ThreadActive:
# --------> vvvvvvvvvvvv
            face_cascade = cv2.CascadeClassifier('cascade/haarcascade_russian_plate_number.xml')
            ret, frame = self.cam.read()                      # Capture.read()
            if ret:
                image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                flipped_image = cv2.flip(image, 1)
# ---------------------------> ???????????
#                with_cascade = faceCascade.detectMultiScale(flipped_image, 1.3, 7)
# ---------------------------> vvvvvvvvvvvv
                with_cascade = face_cascade.detectMultiScale(flipped_image, 1.3, 7)

                for (x, y, w, h) in with_cascade:
                    roi_color = ret[y:y + h, x:x + w]
                    r = 300.0 / roi_color.shape[1]
                    dim = (400, int(roi_color.shape[0] * r))
                    resized = cv2.resize(roi_color, dim, interpolation=cv2.INTER_AREA)
                convert_to_qt_format = QImage(resized.data, resized.shape[1], fresized.shape[0], QImage.Format_RGB888)
                self.ImageUpdate.emit(convert_to_qt_format)


Как на python организовать сравнение двух строк?
Пробовал проходить по строкам циклом и увеличивать переменную coincidences при совпадении
<code>
s = "hello world how are you doing"
a = "doing"
coincidences = 0
for r in range(max(len(a), len(s))):
    try:
        if s[r] == a[r]:
            coincidences += 1
    except IndexError:
        break
print(100/max(len(s), len(a)) * coincidences)
</code>
Но не хватает точности сравнения.
Есть ли модуль для сравнения строк в python?

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

s = "hello world how are you doing"
a = "doing"
mn_string, mx_string = (s, a) if len(s) < len(a) else (a, s)

for i in range(len(mn_string)-1, -1, -1):
  if mn_string[:i+1] in mx_string:
    coincidences = i+1
    break

print(coincidences*100/ len(mx_string)) # 17.24137931034483

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

# тут сработает верно, ответ около 48
s = "My name is Dima"
a = "is Dima"

# тут сработает неверно, ответ будет 0
s = "My name is Dima"
a = "They call me Dima"


Как удалить дублирующиеся значения в списке словарей?
Есть список, который возвращается неким API-сервисом в таком виде:

l = [{'country': 'USA', 'state': 'Utah', 'town': 'Beaver'}, {'country': 'USA', 'state': 'Utah', 'town': 'Ogden'}, {'country': 'USA', 'state': 'Colorado', 'town': 'Denver'}, {'country': 'USA', 'state': 'Colorado', 'town': 'Salida'}, {'country': 'Brazil', 'state': 'Amazonas', 'town': 'Andarahy'}, {'country': 'Brazil', 'state': 'Amazonas', 'town': 'Tefe'}, {'country': 'Brazil', 'state': 'Roraima', 'town': 'Boa Vista'}, {'country': 'Brazil', 'state': 'Roraima', 'town': 'Ente-Rios'}]

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

l_1 = [{'country': 'USA', 'state': 'Utah', 'town': 'Beaver'}, { 'town': 'Ogden'}, {'country': 'USA', 'state': 'Colorado', 'town': 'Denver'}, {'town': 'Salida'}, {'country': 'Brazil', 'state': 'Amazonas', 'town': 'Andarahy'}, {town': 'Tefe'}, {'country': 'Brazil', 'state': 'Roraima', 'town': 'Boa Vista'}, {'town': 'Ente-Rios'}]

Буду рад любым советам.

Немного странный желаемы результат. Не проще ли города из одной и той же провинции держать в виде списка в основном словаре?:

import pandas as pd

l = [{'country': 'USA', 'state': 'Utah', 'town': 'Beaver'}, {'country': 'USA', 'state': 'Utah', 'town': 'Ogden'}, {'country': 'USA', 'state': 'Colorado', 'town': 'Denver'}, {'country': 'USA', 'state': 'Colorado', 'town': 'Salida'}, {'country': 'Brazil', 'state': 'Amazonas', 'town': 'Andarahy'}, {'country': 'Brazil', 'state': 'Amazonas', 'town': 'Tefe'}, {'country': 'Brazil', 'state': 'Roraima', 'town': 'Boa Vista'}, {'country': 'Brazil', 'state': 'Roraima', 'town': 'Ente-Rios'}]

df=pd.DataFrame(l)
d = df.groupby(["country", "state"])["town"].apply(lambda x: list(x)).reset_index().to_dict(orient="records")

теперь d у вас:

[{'country': 'Brazil', 'state': 'Amazonas', 'town': ['Andarahy', 'Tefe']}, {'country': 'Brazil', 'state': 'Roraima', 'town': ['Boa Vista', 'Ente-Rios']}, {'country': 'USA', 'state': 'Colorado', 'town': ['Denver', 'Salida']}, {'country': 'USA', 'state': 'Utah', 'town': ['Beaver', 'Ogden']}]

Если нужно вот именно так, как вы написали, то добавляем такой цикл:

res = []
for i in d:
    second = i["town"][1]
    i["town"] = i["town"][0]
    res.append(i)
    res.append({"town":second})

теперь у вас в res:

[{'country': 'Brazil', 'state': 'Amazonas', 'town': 'Andarahy'}, {'town': 'Tefe'}, {'country': 'Brazil', 'state': 'Roraima', 'town': 'Boa Vista'}, {'town': 'Ente-Rios'}, {'country': 'USA', 'state': 'Colorado', 'town': 'Denver'}, {'town': 'Salida'}, {'country': 'USA', 'state': 'Utah', 'town': 'Beaver'}, {'town': 'Ogden'}]

Если остановиться на первом варианте, но учесть, что помимо поля "town" могут быть и другие, то сделать можно так:

d = df.groupby(["country", "state"])[["town", "code"]].apply(lambda x: x.to_dict(orient="records")).reset_index().to_dict(orient="records")
print(d)

получим
d:

{'country': 'Brazil', 'state': 'Amazonas', 0: [{'town': 'Andarahy', 'code': 555}, {'town': 'Tefe', 'code': 666}]}, {'country': 'Brazil', 'state': 'Roraima', 0: [{'town': 'Boa Vista', 'code': 777}, {'town': 'Ente-Rios', 'code': 888}]}, {'country': 'USA', 'state': 'Colorado', 0: [{'town': 'Denver', 'code': 241}, {'town': 'Salida', 'code': 444}]}, {'country': 'USA', 'state': 'Utah', 0: [{'town': 'Beaver', 'code': 124}, {'town': 'Ogden', 'code': 144}]}]

где поля town и другие находятся в каждом словаре списка со своей страной и провинцией под индексом "0"


Использование subprocess для открытия файла
Есть данная строка в коде:
<code>
subprocess.run(file_for_open, shell=True, encoding='UTF-8')
</code>
Не понимаю почему, но он не открывает файлы, в пути которых есть пробел. Но, если этот же пусть записать напрямую в subprocess.run, то он без проблем его откроет.
Как можно решить проблему с пробелами, когда вводишь путь до файла через другую переменную?

Файл надо открывать через start

import subprocess, os, platform

filepath = "D:\\Ucheba\\Новая папка\\Линукс 1\\LR1.pdf"

if platform.system() == 'Darwin':       # macOS
    subprocess.call(('open', filepath))
elif platform.system() == 'Windows':    # Windows
    os.startfile(filepath)
else:                                   # linux variants
    subprocess.call(('xdg-open', filepath))

Или к одному стилю

import subprocess, platform

filepath = "C:\\Users\\eri\\Downloads\\Заявление на получение КЭП.pdf"

if platform.system() == 'Darwin':       # macOS
    subprocess.call(('open', filepath))
elif platform.system() == 'Windows':    # Windows
    subprocess.call(('start', "", filepath), shell=True)
else:                                   # linux variants
    subprocess.call(('xdg-open', filepath))


selenium как взять значение у элемента background-image
есть вот такой код html

  <div loading="lazy" class="gallery__picture" style="background-image: url("ссылка на фото");"><!----></div>

и мне нужно найти значение  url y background-image

 img = driver.find_elements(by=By.CLASS_NAME, value='gallery__picture')

  for i in img:
    print(i.get_attribute('style'))

как я могу это сделать?

Таким способом мы получаем   background-image

   img = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CLASS_NAME, "gallery__picture"))).value_of_css_property("background-image")

на выходе мы получаем url('Ссылку')
чтобы убрать url и скобки

img = re.split('[()]',img)[1]


Регулярное выражение для даты в Python
У меня есть большой набор данных с комментариями к фин. операциям.
В комментариях иногда пишут дату начисления, в любом удобном формате. Мне нужно ее считывать независимо от формата.
Допустим есть коммент:

"Дата начисления 21.04.2022"

Отсюда мне надо вытащить только "21.04.2022" и преобразовать в единый формат
2022-04-21
Или, например:

"Дата начисления: 21/04/2022"

Задача та же, независимо от разделителей.
В
AppsScript делал это регулярным выражением

/\d{2}(\D)\d{2}\1\d{4}/g

через
String.match(), попробовал через
re.match через то же выражение прокрутить строку, но это не работает почему-то.
Подскажите, что можно сделать. Возможно, есть более простой способ в питоне это реализовать
Так это было в AppsScript

acc_date = d.comment.toString().match(/\d{2}(\D)\d{2}\1\d{4}/g);

Так в Питоне

accDate = re.match("/\d{2}(\D)\d{2}\1\d{4}/g", str(transcation['comment']), flags=0)

Пользовал одно время вот эту штуку.
Пример использования
<code>
import datefinder

a = datefinder.find_dates('"Дата начисления 21.04.2022". Отсюда мне надо вытащить только "21/04/2022"')
b = list(a)
print(b)

# OUT
# [datetime.datetime(2022, 4, 21, 0, 0), datetime.datetime(2022, 4, 21, 0, 0)]

print(b[0].date().isoformat())

# OUT
# '2022-04-21'
</code>


Как получить first_name из callbackquery в aiogram?
Я делаю телеграм бота и хочу сделать интерактив между пользователями бота с помощью кнопок,
подскажите как сделать чтобы получать
first_name другого человека из callback. Я могу получить свой
first_name используя
callback.from_user.first_name , но как мне вытащить
first_name из сообщения на которое я ответил. Выглядит это так:

@dp.message_handler(commands=['rp', 'рп'])
async def roleplay(message: types.Message):
    if not message.reply_to_message:
    return await message.reply('Команда должна быть ответом на сообщение!')
    elif message.reply_to_message:
        await message.reply('Доступные взаимодействия', reply_markup=togrp_kb1)

@dp.callback_query_handler(text='smile')
async def smile(callback: types.CallbackQuery):
    await callback.message.edit_text(text=f'{callback.from_user.first_name} улыбнулся {какому-то пользователю}')

То есть я пишу
/rp ответом на сообщение у меня появляется кнопка и при нажатии на кнопку, сообщение редактируется и там какое-то действие. Я пытался доставать так
callback.message.reply_to_message.from_user.first_name
Но он достаёт моё имя.
А нужен другой пользователь. Может как то получать из get_chat_member? Как поступить? Что посоветуете?

Данный вопрос решил так:
Используя
global

@dp.message_handler(commands=['rp', 'рп'])
async def roleplay(message: types.Message):
    global otherusername
    otherusername = message.reply_to_message.from_user.first_name
    if not message.reply_to_message:
    return await message.reply('Команда должна быть ответом на сообщение!')
    elif message.reply_to_message:
        await message.reply('Доступные взаимодействия', reply_markup=togrp_kb1)

Затем нажимаем на кнопку
В самой кнопке код:

@dp.callback_query_handler(text='smile')
async def smile(callback: types.CallbackQuery):
    await callback.message.edit_text(text=f'{callback.from_user.first_name} улыбнулся {otherusername}')

В ответ получаем сообщение по типу:
Миша улыбнулся
Вася


async socket python как асинхронно дождаться возможности писать/читать сокет
Играюсь с
socket. С обычной версией я вроде разобрался и теперь хочу написать асинхронную. Например простой эхо сервер. Есть код:

    async def _run(self) -> None:
        self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.server_socket.bind((settings.HOST, settings.PORT))
        self.server_socket.listen(8)
        self.server_socket.setblocking(False)

        loop = asyncio.get_event_loop()

        while True:
            client, address = await loop.sock_accept(self.server_socket)
            print(f"Connected {address}")
            loop.create_task(self.handle_client(client, address))

    async def handle_client(self, client_socket: socket.socket, address: tuple) -> None:
        while True:
            data = client_socket.recv(1024).decode(encoding=settings.ENCODING)  # BlockingIOError: [WinError 10035] Операция на незаблокированном сокете не может быть завершена немедленно
            if not data:
                break
            client_socket.send(data.upper().encode(encoding=settings.ENCODING))
            print(data)

Он ломается с ошибкой:

BlockingIOError: [WinError 10035] Операция на незаблокированном сокете не может быть завершена немедленно
Я примерно понимаю почему: стоит
self.server_socket.setblocking(False) для реализации асинхронности и клиент ещё не прочитал прошлые данные или просто ещё не готов. Если перед
client_socket.recv поставить
time.sleep, то всё начинает работать, но это явно не решение.
Как мне асинхронно (чтобы другие клиенты в этот момент могли обрабатываться) дождаться момента, когда я смогу прочитать/написать что-либо?
P.S. Я знаю про
asyncore, но хочу написать всё с нуля и понять как всё работает изнутри

Можно сделать пример рабочим, если заменить

client_socket.recv(1024)
на

(await asyncio.get_event_loop().sock_recv(client_socket, 1024)).
(получение loop'а лучше вынести)
Что происходит внутри - можно посмотриеть в исходниках CPython
Если коротко, то операционная система предоставляет возможность для файлового дескриптора(в сокете он тоже присутствует) получать события, в том числе событие возможности чтения.
Делается это с помощью селектора(Poll, Epoll, ...). При этом селектору передаётся за какими файловыми дескрипторами и событиями надо следить.


Aiogram не отправляет сообщение в одну из групп в Telegram
Вообщем, у меня есть бот в телеграмме, сделанный на aiogram,а так же 2 группы. В первую группу у которой ID состоит из 10 символов он отправляет сообщение спокойно. Во вторую группу, у которой ID более 10 символов он не может отправить сообщение, только если ответить пользователю в ней. Что не так?

Вопрос закрыт.
Я решил проблему обходными путями (отправляю сообщение HTTP запросом через API). Так сообщение отправляется.


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

Я написал код. Он работает, но не во всех случаях. Например:
Ввод: AAABBB
Вывод: A3B3
В такой ситуации мой код работает и всё хорошо.

Однако может быть такая ситуация:
Ввод: AAABBAA
Вывод, который должен быть: A3B2A2
Вывод, который дает мой код: A5B2

Вот мой код:
<code>
text = input()

li = []
li1 = []

for i in text:
    li.append(i)

for i in li:
    j = li.count(i)
    if j != 1:
        if i not in li1:
            li1.append(i)
            li1.append(j)
    else:
        if i not in li1:
            li1.append(i)

print(*li1, sep='')
</code>
Подскажите, пожалуйста, как исправить. Заранее спасибо.

пользуйтесь встроенными библиотеками:

from itertools import groupby

a = "AAABBBAABABBB"

res = "".join([f"{i}{len(list(g))}" for i,g in groupby(a)])
print(res)

A3B3A2B1A1B3

Если единицы не нужно выводить, то из-за особенностей генератора groupby можно сделать так:

res = "".join([f"{x[0]}{x[1] if x[1]>1 else ''}"
               for x in [(i, len(list(g))) for i, g in groupby(a)]])
print(res)

A3B3A2BAB3


Как переписать этот код итеративно
Есть код для получения пути, у меня с рекурсией траблы, помогите переписать итеративно, я понимаю, что должен быть стек, с которого будет что-то доставаться, но как переписать без понятия
<code>
def all_paths(a, b, n, graph):
    visited = [False] * n
    path = []
    get_all_paths(a, b, visited, path, graph)

def get_all_paths(a, b, visited, path, graph):
    visited[a] = True
    path.append(a)

    if a == b:
        print(path)
    else:
        for vertex in graph[a]:
            if not visited[vertex[0]]:
                get_all_paths(vertex[0], b, visited, path, graph)

    path.pop()
    visited[a] = False
</code>

В стеке нужно хранить те переменные, что у вас уникальны для каждого вызова. В  этом случае это текущая вершина
a и текущее ребро (у вас задано конечной вершиной ребра
vertex). Для удобства я храню пару (вершина, индекс в массиве ребер):

def all_paths_iter(a, b, n, graph):
    visited = [False] * n
    path = [[a, 0]]
    while path:
        a, idx = path[-1]
        if idx == 0:
            visited[a] = True

        if a == b:
            print([v[0] for v in path])
        else:
            if idx < len(graph[a]):
                vertex = graph[a][idx]
                path[-1][1] += 1
                if not visited[vertex[0]]:
                    path.append([vertex[0], 0])
                continue
        # сюда попадаем если дальше из а идти не нужно
        # т.е. все просмотрели или а это конец пути
        path.pop()
        visited[a] = False


Удалить строку в файле по слову
скрипт ниже удаляет строки в которых содержатся задаваемые слова
например нужно удалить строку из файла где есть слово some:
file.txt

123
some line need delete
something is ...

результат:

123

код программы

word = 'some'
f = open('file.txt', "r+")
Lines = f.readlines()
f.seek(0)
for line in Lines:
    if not re.search(word, line):
        f.write(line)
f.truncate()
f.close()

Как удалять те строки в котором есть целое слово some, не удаляя строку в которой some составляющая другого слова?

А зачем применять инструмент, который в данном случае как минимум сложнее, чем самый тривиальный инструмент самого Python?

for line in Lines:
    if 'some' not in line.split():
         print(line)

Результат:

123
something is ...


Парсинг текстового файла, записанного в виде списка кортежей
На вход подается текстовый файл, который содержит список из трех списков с кортежами.

[ [(3, 5)], [((2, 2), 1)], [((3, 2), 1), ((2, 2), 2)] ]

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

f = open('input.txt','r', encoding='utf8')

#парсинг текстового файла записанного в виде списка кортежей
k = f.read().replace(' ', '').strip('[[ ]]\n').split('],[')
#вывод для демонтсрации того, что все работает чисто
for i in k:
    print(i)
#парсинг в три списка с целыми значениями
my_list1 = list(map(int, k[0].strip('( )').split(',')))
tmp = k[1].strip('( )').split('),((')
my_list2 = [ tuple(map(int, i.replace(')', '').split(','))) for i in tmp]
tmp = k[2].strip('( )').split('),((')
my_list3 = [ tuple(map(int, i.replace(')', '').split(','))) for i in tmp]

Есть ли какие-нибудь библиотеки или методы, которые выполняют эту задачу?

Вот здесь посмотрите
<code>
>>> from ast import literal_eval as make_tuple

>>> for i in k:
...   print(make_tuple(i))
(3, 5)
((2, 2), 1)
(((3, 2), 1), ((2, 2), 2))
</code>
на выходе будут кортежи, которые можно в лист


Анализ логов IIS с использованием pandas
Задача сама по себе не сложная и решается силами чистого питона плюс-минус понятно, но пытаюсь прикрутить к ее решению pandas. Раньше для подобных задач все конвертил в эксель, но в данном случае (около 6 млн строк) эксель дает дуба :)
Есть логи IIS и я хочу получить из них информацию о количестве запросов к серверу, например в интервалы по 10 минут (т.е. это разбиение на временные интервалы)
из логов получил датафрейм (взял маленький кусок для примера):

 df = get_dataframe(get_log_list())

date        time            cs-username  timestamp  0
2022-05-17  01:36:55                   - 2022-05-17 01:36:55 1
2022-05-17  01:36:59        test1        2022-05-17 01:36:59 2
2022-05-17  01:37:09                   - 2022-05-17 01:37:09 3
2022-05-17  01:37:10        test1        2022-05-17 01:37:10 4
2022-05-17  04:51:55                   - 2022-05-17 04:51:55 ...

Никак не могу разобраться, как получить количество запросов к серверу поинтервально (с шагом в 10 минут, например):
то есть получить результат, для приведенного примера, вида:

    2022-05-17 01:20:00 - 0
    2022-05-17 01:30:00 - 25
    2022-05-17 01:40:00 - 100
    2022-05-17 01:50:00 - 300
    etc

Как в целом применять условие "учитывать только запросы где "cs-username равно какому-то определенному значению или пустому". например учитывать при подсчете только запросы без авторизации, т.е. с пустым юзернеймом или наоборот?

попробуйте как-то так:

# устанавливаем timestamp как индекс и преобразуем в тип datetime
df = pd.read_excel('1.xls',index_col='timestamp',parse_dates=True)

df = df.resample('10min').size()
>>> df.head()
'''
timestamp
2022-05-18 05:00:00     4
2022-05-18 05:10:00     0
2022-05-18 05:20:00    28
2022-05-18 05:30:00    56
2022-05-18 05:40:00    16
Freq: 10T, dtype: int64

а на счет "учитывать только запросы где "cs-username равно какому-то определенному значению или пустому", вы можете использовать фильтрацию строк, например:
df[df['cs-username']=='test1']