import requests
from bs4 import BeautifulSoup
# go to website
url = 'https://example.com'
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
path_tag = soup.find('path', {'class': 'shape'}) # CSS selector
if path_tag is not None:
fill_opacity = path_tag.get('fill-opacity', 'Ошибка: fill-opacity не обнаружен!')
else:
fill_opacity = 'Ошибка: fill-opacity не обнаружен!'
else:
fill_opacity = f'Ошибка: не удалось подключиться к сайту {response.status_code}'
# result
print(fill_opacity)
Возможно ли из класса-потомка получить класс-родитель?
from dataclasses import dataclass
import typing
import io
# Определение базового класса для хранения информации о файле и ID объекта
@dataclass
class EjectedObjectDataFileNameAndObjectID:
file_name: str # Имя файла
object_id: int # ID объекта
# Определение класса для хранения изображений
@dataclass
class EjectedObjectDataImages:
images: typing.List[io.BytesIO] # Список изображений в формате BytesIO
# Класс, наследующий оба вышеуказанных класса и добавляющий дополнительные атрибуты
@dataclass
class EjectedObjectData(EjectedObjectDataImages, EjectedObjectDataFileNameAndObjectID):
uuid: str # Уникальный идентификатор
position: typing.Tuple[int, int] = (0, 0) # Позиция объекта (по умолчанию (0, 0))
sorted: bool = False # Флаг, указывающий, отсортирован ли объект (по умолчанию False)
# Метод для создания экземпляра родительского класса из текущего экземпляра
def to_parent(self) -> EjectedObjectDataFileNameAndObjectID:
# Возвращаем новый экземпляр EjectedObjectDataFileNameAndObjectID,
# используя атрибуты текущего экземпляра
return EjectedObjectDataFileNameAndObjectID(self.file_name, self.object_id)
# Пример использования:
# Создаем экземпляр EjectedObjectData
data = EjectedObjectData(["image1", "image2"], "some_file", 123, "some_uuid")
# Получаем экземпляр родительского класса из экземпляра потомка
parent_data = data.to_parent()
# Выводим информацию о родительском классе
print(parent_data)
Существует ли аналог Proxy и Reflect (как в JS) для Python?
class Proxy:
def __init__(self, target):
self.target = target
def __getattr__(self, name):
print(f"Пытаемся получить атрибут {name}")
if isinstance(self.target, dict):
return self.target.get(name, None)
return getattr(self.target, name, None)
def __setattr__(self, name, value):
if name == 'target':
super().__setattr__(name, value)
else:
print(f"Устанавливаем значение {value} для атрибута {name}")
if isinstance(self.target, dict):
self.target[name] = value
else:
setattr(self.target, name, value)
obj = Proxy({'x': 1})
print(obj.x)
obj.x = 2
class Proxy:
def __call__(self, *args, **kwargs):
print("Объект вызван как функция")
p = Proxy()
p()
obj = {'x': 1}
print(getattr(obj, 'x', None))
setattr(obj, 'x', 2)
class Meta(type):
def __new__(cls, name, bases, dct):
print(f"Создается класс {name}")
return super().__new__(cls, name, bases, dct)
class MyClass(metaclass=Meta):
pass
massage_handler
- массаж обработчика?await message.answer
вышла из чата?@dp.massage_handler()
async def echo(message: types.Message):
await message.answer(message.text)
from aiogram import Bot, Dispatcher, executor, types
# Bot init
bot = Bot(token="6563641220:AAFBWH_TQ4SW_Zk-6sVyBpeX5rSJitWoRQM")
dp = Dispatcher(bot)
# echo
@dp.message_handler()
async def echo(message: types.Message):
await message.answer(message.text)
# Запуск лонг-полинг
if __name__ == "__main__":
executor.start_polling(dp, skip_updates=True)
>
и _
, которые также являются частью Вашей строки bytes
. Коды этих символов (62 и 95) в десятичной системе и являются теми числами, которые вызывали у Вас вопросы.data = b'>\x02\xfe\xbf_\xec\xe6\xee\x00R'
for i in range(len(data)):
hex_repr = '\\x{:02x}'.format(data[i])
print(i, data[i], f"({hex_repr})")
# 0 62 (\x3e)
# 1 2 (\x02)
# 2 254 (\xfe)
# 3 191 (\xbf)
# 4 95 (\x5f)
# 5 236 (\xec)
# 6 230 (\xe6)
# 7 238 (\xee)
# 8 0 (\x00)
# 9 82 (\x52)
Got error selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable: Element is not currently visible and may not be manipulated
Как можно поправить? На экране он виден
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("example.com")
# находим и кликаем на элемент .SumoSelect
dropdown_container = driver.find_element(By.CSS_SELECTOR, ".SumoSelect")
dropdown_container.click()
# ждем появления элемента li.opt label, но не более 10 сек
option_to_select = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CSS_SELECTOR, "li.opt label"))
)
# итерируемся по всем option и кликаем, если текст option равен AB
for option in options:
if "AB" == option.text.strip():
option.click()
break
else:
print("Не удалось найти нужную опцию.")
driver.quit()
Почему когда я указываю большие разбиваемого и количества слогаемых,вылетает ошибка:
print(partition(1024,5))
import sys
sys.setrecursionlimit(5000)
def partition(n, k):
stack = [(n, k, [])]
while stack:
current_n, current_k, current_partition = stack.pop()
if current_n == 0 and current_k == 0:
print(" + ".join(map(str, current_partition)))
elif current_n == 0 or current_k == 0:
continue
elif current_n < 0:
continue
else:
for i in range(1, current_n+1):
new_n = current_n - i
new_k = current_k - 1
new_partition = current_partition + [i]
stack.append((new_n, new_k, new_partition))
partition(5, 3)
import winreg
# Добавляем в автозагрузку
def add_to_startup(program_name, executable_path):
# Реестр
registry_path = winreg.HKEY_CURRENT_USER
key_path = r'SOFTWARE\Microsoft\Windows\CurrentVersion\Run'
try:
# Открываем ключ реестра для записи
with winreg.OpenKeyEx(registry_path, key_path, 0, winreg.KEY_WRITE) as registry_key:
# Создание или обновление реестра
winreg.SetValueEx(registry_key, program_name, 0, winreg.REG_SZ, executable_path)
print(f"{program_name} добавлена в автозагрузку.")
except PermissionError:
print("Нужны админские права.")
# Проверка программы в автозагрузке
def check_startup_entry(program_name):
registry_path = winreg.HKEY_CURRENT_USER
key_path = r'SOFTWARE\Microsoft\Windows\CurrentVersion\Run'
try:
# Открываем ключ реестра для чтения
with winreg.OpenKeyEx(registry_path, key_path, 0, winreg.KEY_READ) as registry_key:
program_path, regtype = winreg.QueryValueEx(registry_key, program_name)
print(f"{program_name} уже добавлена в автозагрузку с путем: {program_path}")
except FileNotFoundError:
print(f"{program_name} не найдена в автозагрузке.")
if __name__ == "__main__":
program_name = "GodzillaSoft"
program_path = r"C:\path\GodzillaSoft.exe"
check_startup_entry(program_name)
add_to_startup(program_name, program_path)
x = 5
y = 555
print(f"{x:1}") # "5", минимальная ширина поля вывода переменной x = 1 (вывести значение x, удостоверившись, что оно занимает по меньшей мере один символ)
print(f"{x:3}") # " 5"
print(f"{y:3}") # "555"
# Округление Pi до десятичного значения
pi = 3.141592653589793
print(f"Pi: {pi:.1f}") # Pi: 3.1
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\machine\mynote.exe" & Chr(34), 0
Set WshShell = Nothing
import os
import winshell
def create_autostart_link_for_vbs(application_path, link_name, start_directory="", icon_directory=None):
# Путь к папке автозагрузки
startup_folder = winshell.startup()
# Путь, где будет храниться ярлык
link_path = os.path.join(startup_folder, f"{link_name}.lnk")
# Создание ярлыка
with winshell.shortcut(link_path) as link:
link.path = application_path
link.description = f"Link for {application_path}"
link.working_directory = start_directory
if icon_directory:
link.icon_location = (icon_directory, 0)
return link_path
# Путь до vbs скрипта
path_to_vbs = r"C:\machine\silent.vbs"
# Юзаем
create_autostart_link_for_vbs(path_to_vbs, "AutostartAppWithoutWindow")
Как получить доступ к свойству объекта "extract" не зная его название?
data = {
"batchcomplete": "",
"query": {
"pages": {
"18978754": {
"pageid": 18978754,
"ns": 0,
"title": "Apple",
"extract": "An apple is a round, edible fruit..."
}
}
}
}
def print_key_value_pairs(obj, indent=0):
if isinstance(obj, dict):
for key, value in obj.items():
print(' ' * indent + f"Key: {key}")
if isinstance(value, (dict, list)):
print_key_value_pairs(value, indent+4)
else:
print(' ' * (indent+4) + f"Value: {value}")
elif isinstance(obj, list):
for index, item in enumerate(obj):
print(' ' * indent + f"Index: {index}")
print_key_value_pairs(item, indent+4)
print_key_value_pairs(data)
from itertools import repeat
from multiprocessing import Pool, Manager
def reader(entry, outcomes):
# ...
prediction = min(distances) + (mlc_data[min(distances)[1]],)
outcomes[entry_pairs[' '.join(entry)]] = prediction
manager = Manager()
outcomes = manager.dict()
with Pool(3) as p:
# Обрабатываем каждый элемент из input[0] и сохраняем результаты в outcomes:
p.starmap(reader, zip(input[0], repeat(outcomes)))
p.close()
p.join()
print(outcomes) # должен содержать все элементы
Мне нужно вернуть три переменные из функции. Проблема в том что одна из них находиться в цикле for, а две другие нет.
Я не хочу делать два альтернативных выхода
var1, var2, var3: '', '', ''
{'data1': var1, 'data2': var2, 'data3': var3}
import sqlite3
def update_db(**params):
# Если 'idd' нет в параметрах
if 'idd' not in params:
raise ValueError("Ты забыл передать 'idd'! Это обязательно.")
# Достаем 'idd' из параметров
user_id = params.pop('idd')
# Создаем строку для SQL запроса
set_clause = ', '.join(f"{key} = ?" for key in params.keys())
query = f"UPDATE users SET {set_clause} WHERE gi = ?"
# Подготавливаем значения для SQL запроса
values = list(params.values()) + [user_id]
# Подключаемся к БД
with sqlite3.connect('baza.sql') as conn:
cur = conn.cursor()
cur.execute(query, values)
conn.commit()
update_db(name="Антон", date="05 марта", ank="Ой всё!", idd="id99938")
update_db(name="Сергей", idd="id99939")
import csv
def get_search_terms():
return input("Вводи данные пёс, и разделить не забудь ';': ").split(';')
def find_matches_in_csv(file_name, search_terms):
found_entries = []
with open(file_name, 'r', encoding='utf-8') as csv_file:
reader = csv.reader(csv_file, delimiter=';')
next(reader)
for row in reader:
if any(term.lower() in entry.lower() for entry in row for term in search_terms):
formatted_row = '; '.join([x for x in row if x])
found_entries.append(formatted_row)
return found_entries
if __name__ == "__main__":
FILE_PATH = 'krasna.csv'
terms_to_search = get_search_terms()
matching_entries = find_matches_in_csv(FILE_PATH, terms_to_search)
if matching_entries:
for entry in matching_entries:
print(entry)
else:
print("Не найдено")
978196782; Віталій; Даниленко; Андрійович
Примерно нахожусь между начинающим и средним
Вот темы которые я знаю на достаточном уровне:
- Основы python (циклы, условные операторы, переменные, функции, строки, списки)
- Вложенные списки (матрицы)
- Кортежи
- Множества
- Словари
- Некоторые модули
Можете посоветовать книги или курсы по python?
from dataclasses import dataclass
from typing import Any, Literal, TypeAlias, Self
@dataclass()
class BaseConfig:
ITEM: TypeAlias = Literal["item1", "item2"]
class MyClass:
def __init__(self, config: BaseConfig = BaseConfig) -> None:
self.config = config
def meth(self, item: Any) -> Self:
if item not in self.config.ITEM:
raise ValueError(f"Invalid value {item} for item. Expected one of {self.config.ITEM}.")
...