Python для новичков

@pythonvideo


Админ: @solkogan
Купить рекламу: https://telega.in/c/pythonvideo

Python для новичков

23 Oct, 08:42


Подписывайтесь на мой второй канал, про Linux

👇👇👇

https://t.me/mindlinux

👆👆👆

Python для новичков

23 Oct, 01:43


https://habr.com/ru/companies/selectel/articles/852468/

Python для новичков

21 Oct, 02:40


Работа с документами формата DOCX в Python может значительно упростить офисные задачи. Для этого часто используется библиотека python-docx, которая позволяет создавать, изменять и анализировать документы Word.

### Установка библиотеки

Сначала необходимо установить библиотеку, если она еще не установлена:

pip install python-docx


### 1. Создание нового DOCX документа

Этот код создает новый документ и добавляет в него заголовок и абзац.

from docx import Document

def create_document():
doc = Document()
doc.add_heading('Заголовок документа', level=1)
doc.add_paragraph('Это абзац текста в новом документе.')
doc.save('новый_документ.docx')

create_document()


### 2. Чтение текста из существующего DOCX документа

Этот код считывает текст из существующего документа и выводит его на экран.

from docx import Document

def read_document(file_path):
doc = Document(file_path)
for paragraph in doc.paragraphs:
print(paragraph.text)

read_document('существующий_документ.docx')


### 3. Добавление таблицы в документ

Этот код добавляет таблицу в документ с заданным количеством строк и столбцов.

from docx import Document

def add_table_to_document():
doc = Document()
table = doc.add_table(rows=3, cols=3)
for row in table.rows:
for cell in row.cells:
cell.text = 'Текст ячейки'
doc.save('документ_с_таблицей.docx')

add_table_to_document()


### 4. Изменение текста в существующем документе

Этот фрагмент кода изменяет текст в существующем документе.

from docx import Document

def modify_document(file_path):
doc = Document(file_path)
for paragraph in doc.paragraphs:
if 'старый текст' in paragraph.text:
paragraph.text = paragraph.text.replace('старый текст', 'новый текст')
doc.save('измененный_документ.docx')

modify_document('существующий_документ.docx')


### 5. Добавление изображений в документ

Этот код добавляет изображение в документ.

from docx import Document

def add_image_to_document():
doc = Document()
doc.add_heading('Документ с изображением', level=1)
doc.add_paragraph('Вот изображение:')
doc.add_picture('путь_к_изображению.jpg', width=docx.shared.Inches(2))
doc.save('документ_с_изображением.docx')

add_image_to_document()


### 6. Поиск и удаление абзацев

Этот код ищет и удаляет абзацы, содержащие определенный текст.

from docx import Document

def remove_paragraphs(file_path, text_to_remove):
doc = Document(file_path)
for paragraph in doc.paragraphs:
if text_to_remove in paragraph.text:
p = paragraph._element
p.getparent().remove(p)
doc.save('документ_без_абзацев.docx')

remove_paragraphs('существующий_документ.docx', 'текст для удаления')


### 7. Форматирование текста

Этот код форматирует текст в документе, добавляя жирный шрифт и курсив.

from docx import Document
from docx.shared import Pt

def format_text_in_document(file_path):
doc = Document(file_path)
for paragraph in doc.paragraphs:
run = paragraph.add_run('Этот текст будет жирным и курсивом. ')
run.bold = True
run.italic = True
doc.save('документ_с_форматированием.docx')

format_text_in_document('существующий_документ.docx')

Python для новичков

20 Oct, 06:06


Шпаргалка по библиотеке hashlib в Python, которая поможет новичкам понять, как использовать её для работы с хешированием данных.

### Что такое hashlib?

hashlib — это стандартная библиотека Python, которая предоставляет интерфейс для создания хеш-функций. Хеш-функции используются для создания уникального представления данных фиксированной длины (хеша) из произвольного объема данных.

### Установка

hashlib входит в стандартную библиотеку Python, поэтому установка не требуется. Просто импортируйте библиотеку:

import hashlib


### Основные хеш-функции

hashlib поддерживает несколько популярных хеш-функций:

- MD5: hashlib.md5()
- SHA-1: hashlib.sha1()
- SHA-256: hashlib.sha256()
- SHA-512: hashlib.sha512()

### Примеры использования

#### 1. Создание хеша

import hashlib

# Создание объекта хеша
hash_object = hashlib.sha256()

# Обновление хеша данными
hash_object.update(b'Hello, world!') # Обратите внимание, данные должны быть в байтах

# Получение хеша в шестнадцатеричном формате
hex_dig = hash_object.hexdigest()
print(hex_dig) # Пример вывода: '315f5bdb76d084c2d8b11d0f600bfb0c8b11f8c3f0f0f8e7e7b6f3e4f2c4b2c1'


#### 2. Хеширование строки

import hashlib

# Функция для хеширования строки
def hash_string(input_string):
return hashlib.sha256(input_string.encode()).hexdigest()

# Пример использования
print(hash_string("Hello, world!")) # Вывод: 'a591a6d40bf420404a011733cfb7b190d62c65bf0bcda190c3c6c1e06f89c1b'


#### 3. Хеширование файла

import hashlib

# Функция для хеширования содержимого файла
def hash_file(filepath):
hash_object = hashlib.sha256() # Или любой другой алгоритм
with open(filepath, 'rb') as file:
# Чтение файла по частям
while chunk := file.read(4096):
hash_object.update(chunk)
return hash_object.hexdigest()

# Пример использования
print(hash_file('example.txt')) # Хеш содержимого файла example.txt


### Основные методы

- hashlib.new(name): Создает новый объект хеша по имени алгоритма.
- hash.update(data): Обновляет объект хеша данными. Данные должны быть в байтах.
- hash.hexdigest(): Возвращает хеш в шестнадцатеричном формате.
- hash.digest(): Возвращает хеш в бинарном (байтовом) формате.

### Пример работы с несколькими алгоритмами

import hashlib

# Данные для хеширования
data = b"Hello, world!"

# MD5
md5_hash = hashlib.md5(data).hexdigest()
print("MD5:", md5_hash)

# SHA-1
sha1_hash = hashlib.sha1(data).hexdigest()
print("SHA-1:", sha1_hash)

# SHA-256
sha256_hash = hashlib.sha256(data).hexdigest()
print("SHA-256:", sha256_hash)

# SHA-512
sha512_hash = hashlib.sha512(data).hexdigest()
print("SHA-512:", sha512_hash)


### Заключение

hashlib — это мощный инструмент для работы с хешами в Python. Он широко используется в безопасных приложениях, проверке целостности данных и многих других задачах. Используйте хеши для проверки идентичности данных и защиты паролей, но помните, что некоторые алгоритмы, такие как MD5, больше не считаются безопасными для криптографических целей.

### Полезные ссылки

https://docs.python.org/3/library/hashlib.html

Python для новичков

19 Oct, 07:01


Уже долгое время я изучаю тематику цифрового бессмертия. У меня есть сайт virtperson.net, где можно создавать чат-боты, имитирующие вашу личность.

С каждым днём нейросети становятся всё умнее, а цифровые агенты всё правдоподобнее. К чему это приведёт?

Я выпустил книгу, в которой попытался подробно рассказать о нашем будущем. И да, там даже картинки есть 😉

Заказать можно на Озоне (бумажный вариант, с доставкой):

👇👇👇

https://www.ozon.ru/product/tsifrovoe-bessmertie-removich-ivan-1731172508/

☝️☝️☝️

Python для новичков

19 Oct, 00:52


Шпаргалка по библиотеке Paramiko для работы с SSH в Python.

### Установка
Чтобы установить Paramiko, используйте pip:

pip install paramiko


### Импорт библиотеки
import paramiko


### Подключение к удалённому серверу

#### 1. Подключение с использованием пароля

# Создание клиента SSH
client = paramiko.SSHClient()

# Загрузка известных хостов
client.load_system_host_keys()

# Добавление сервера, если он не в известных хостах
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# Подключение к удалённому серверу
client.connect('hostname_or_ip', username='your_username', password='your_password')

# Выполнение команды
stdin, stdout, stderr = client.exec_command('ls -l')

# Получение результата
print(stdout.read().decode())

# Закрытие соединения
client.close()


#### 2. Подключение с использованием ключа SSH

# Создание клиента SSH
client = paramiko.SSHClient()

# Загрузка известных хостов
client.load_system_host_keys()

# Добавление сервера, если он не в известных хостах
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# Подключение к удалённому серверу с использованием ключа
private_key_path = '/path/to/your/private/key'
private_key = paramiko.RSAKey.from_private_key_file(private_key_path)

client.connect('hostname_or_ip', username='your_username', pkey=private_key)

# Выполнение команды
stdin, stdout, stderr = client.exec_command('ls -l')

# Получение результата
print(stdout.read().decode())

# Закрытие соединения
client.close()


### Выполнение команд

# Выполнение команды и получение результата
stdin, stdout, stderr = client.exec_command('your_command')

# Чтение вывода
output = stdout.read().decode()
error_output = stderr.read().decode()

print('Output:', output)
print('Error:', error_output)


### Передача файлов

#### 1. Скачивание файла

sftp = client.open_sftp()
sftp.get('/remote/path/to/file', '/local/path/to/file')
sftp.close()


#### 2. Загрузка файла

sftp = client.open_sftp()
sftp.put('/local/path/to/file', '/remote/path/to/file')
sftp.close()


### Использование контекста

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

with paramiko.SSHClient() as client:
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('hostname_or_ip', username='your_username', password='your_password')

stdin, stdout, stderr = client.exec_command('ls -l')
print(stdout.read().decode())


### Использование SSH-туннелирования

#### 1. Создание локального туннеля

transport = client.get_transport()
local_port = 12345
remote_host = 'remote_host'
remote_port = 80

# Создание локального туннеля
transport.request_port_forward('localhost', local_port, remote_host, remote_port)


#### 2. Закрытие туннеля

transport.close()


### Обработка исключений

try:
client.connect('hostname_or_ip', username='your_username', password='your_password')
except paramiko.AuthenticationException:
print("Authentication failed.")
except paramiko.SSHException as e:
print(f"Failed to connect: {e}")


### Получение информации о системе

# Получение информации о системе
stdin, stdout, stderr = client.exec_command('uname -a')
print(stdout.read().decode())


### Полезные методы

- client.exec_command(command): Выполнение команды на удалённом сервере.
- client.open_sftp(): Открытие SFTP-сессии для передачи файлов.
- client.load_system_host_keys(): Загрузка известных хостов из системы.
- client.set_missing_host_key_policy(policy): Установка политики для неизвестных хостов.

### Закрытие соединения

Не забудьте закрыть соединение после завершения работы:

client.close()


### Примечания

- Убедитесь, что SSH-сервер запущен на удалённой машине.
- Для использования ключа SSH убедитесь, что права доступа к файлу ключа установлены корректно (например, 600).

Python для новичков

18 Oct, 07:01


Погрузитесь в мир Python с нашим бесплатным курсом!

🎓 Включено 45 уроков, 56 упражнений в тренажере и 163 проверочных теста. Узнаете, как создавать программы, работать с условиями и функциями.

Что вы освоите:
— Составление программ из нескольких модулей.
— Анализ ошибок в коде с использованием отладочной печати.

📚 Курс охватывает основы Python: синтаксис, условия, циклы, типы данных и библиотеки. Практика на каждом шаге поможет вам уверенно использовать язык.

Начните свое обучение с бесплатного базового курса Python и вы сможете создавать несложные программы, а так же анализировать ошибки в коде!

Python для новичков

17 Oct, 03:58


Шпаргалка по библиотеке python-nmap, которая позволяет взаимодействовать с инструментом Nmap из Python. Эта библиотека полезна для автоматизации сетевого сканирования и анализа.

Для работы с библиотекой python-nmap необходимо, чтобы утилита Nmap была предварительно установлена на вашей системе.

### Установка
pip install python-nmap


### Основные компоненты
- nmap: Основной класс для взаимодействия с Nmap.
- scan(): Метод для выполнения сканирования.
- all_info(): Метод для получения всей информации о сканировании.

### Основные методы

#### 1. Импорт библиотеки
import nmap


#### 2. Создание объекта Nmap
nm = nmap.PortScanner()


#### 3. Сканирование
- Синтаксис: scan(hosts, arguments)
- Пример: Сканирование хоста по IP
nm.scan('192.168.1.1', arguments='-sP')  # Ping scan


#### 4. Получение информации о сканировании
- Основная информация о хосте:
print(nm.all_hosts())  # Список всех хостов
print(nm['192.168.1.1'].state()) # Состояние хоста (up/down)


- Получение информации о портах:
for proto in nm['192.168.1.1'].all_protocols():
print('Protocol : %s' % proto)
lport = nm['192.168.1.1'][proto].keys()
for port in sorted(lport):
print('Port : %s\tState : %s' % (port, nm['192.168.1.1'][proto][port]['state']))


#### 5. Сканирование нескольких хостов
nm.scan(hosts='192.168.1.1,192.168.1.2', arguments='-sV')  # Сканирование с определением версии


#### 6. Запуск сканирования с дополнительными аргументами
- Примеры аргументов:
- -sP: Ping scan
- -sS: TCP SYN scan
- -sV: Определение версии службы
- -O: Определение операционной системы
- -p: Сканирование определенных портов
nm.scan('192.168.1.1', arguments='-sS -O -p 22,80')


### Примеры использования

#### Пример 1: Простое сканирование
import nmap

# Создание объекта сканера
nm = nmap.PortScanner()

# Сканирование
nm.scan('192.168.1.1', arguments='-sS')

# Вывод информации
print(nm.all_hosts())
print(nm['192.168.1.1'].state())


#### Пример 2: Сканирование диапазона IP
import nmap

nm = nmap.PortScanner()
nm.scan(hosts='192.168.1.0/24', arguments='-sP')

for host in nm.all_hosts():
print(f'Host: {host} ({nm[host].hostname()})')
print(f'State: {nm[host].state()}')


#### Пример 3: Сканирование с определением версии и ОС
import nmap

nm = nmap.PortScanner()
nm.scan('192.168.1.1', arguments='-sS -sV -O')

print(f"IP: {nm['192.168.1.1'].hostname()}")
print(f"State: {nm['192.168.1.1'].state()}")
print(f"OS: {nm['192.168.1.1']['osmatch'][0]['name']}")


### Обработка ошибок
try:
nm.scan('192.168.1.1')
except nmap.PortScannerError as e:
print(f'Error: {e}')


### Список доступных функций
- all_hosts(): Возвращает список всех найденных хостов.
- state(): Возвращает состояние хоста (up/down).
- all_protocols(): Возвращает все протоколы (TCP/UDP).
- has_tcp(port): Проверяет, есть ли TCP порт.
- has_udp(port): Проверяет, есть ли UDP порт.
- get_service(port, proto): Получает информацию о службе на порту.

Python для новичков

16 Oct, 13:40


🔵 Практический интенсив «Python-разработчик: основы за 2 дня» — 23-24 октября в 19:00 мск.

О перспективах направления Python и многом другом расскажет Рафаэль Мухаметшин, Middle Бэкенд-разработчик в «ПИК Digital» с опытом в разработке более 3 лет.

На вебинаре вы:

☑️ Самостоятельно напишете Telegram-бота с карточными мини-играми.
☑️ Познакомитесь с синтаксисом языка и сферами его применения.
☑️ Поймете как продолжить обучение, какие навыки потребуются, чтобы стать backend-разработчиком на Python.
☑️ Узнаете, чего ждут работодатели от junior-разработчиков и что делать, чтобы найти работу без опыта.

🎁 Приятные бонусы: полезный гайд для начинающего Python-разработчика и гайд о сленге в IT всем участникам интенсива!

Python для новичков

13 Oct, 12:46


Шпаргалка по Scapy с основными командами и примерами кода для работы с сетевыми пакетами.

### Установка Scapy

Если вы еще не установили Scapy, можете сделать это с помощью pip:

pip install scapy


### Импорт модуля

Перед началом работы с Scapy необходимо импортировать его:

from scapy.all import *


### Основные операции с Scapy

#### 1. Создание и отправка пакета

##### Пример: Отправка ICMP Echo Request (Ping)

# Создание ICMP пакета
packet = IP(dst="8.8.8.8")/ICMP()
# Отправка пакета и получение ответа
response = sr1(packet)
response.show() # Отображение ответа


#### 2. Сканиование портов

##### Пример: TCP SYN сканирование

# Сканирование портов на хосте
ans, unans = sr(IP(dst="192.168.1.1")/TCP(dport=[22, 80, 443], flags="S"), timeout=1)
ans.summary() # Отображение результатов


#### 3. Анализ трафика

##### Пример: Захват пакетов с использованием sniff()

# Функция для обработки пакетов
def packet_callback(packet):
print(packet.summary())

# Захват пакетов
sniff(prn=packet_callback, count=10) # Захват 10 пакетов


#### 4. Создание пользовательских пакетов

##### Пример: Создание и отправка UDP пакета

# Создание UDP пакета
udp_packet = IP(dst="192.168.1.1")/UDP(dport=12345)/Raw(load="Hello, World!")
# Отправка пакета
send(udp_packet)


#### 5. Сниффинг и фильтрация пакетов

##### Пример: Захват пакетов с фильтрацией по протоколу TCP

# Захват только TCP пакетов
sniff(filter="tcp", prn=lambda x: x.show(), count=10)


#### 6. Работа с ARP

##### Пример: ARP запрос для получения MAC-адреса

# Создание ARP запроса
arp_request = ARP(pdst="192.168.1.1")
# Создание Ethernet фрейма
broadcast = Ether(dst="ff:ff:ff:ff:ff:ff")
# Комбинирование
arp_request_broadcast = broadcast/arp_request
# Отправка запроса и получение ответа
answered_list = srp(arp_request_broadcast, timeout=1, verbose=False)[0]

for element in answered_list:
print(f"IP: {element[1].psrc}, MAC: {element[1].hwsrc}")


#### 7. Сохранение и загрузка пакетов из файла

##### Пример: Сохранение захваченных пакетов в файл

# Захват пакетов и сохранение в файл
packets = sniff(count=10)
wrpcap("captured_packets.pcap", packets)


##### Пример: Загрузка пакетов из файла

# Загрузка пакетов из файла
packets = rdpcap("captured_packets.pcap")
for packet in packets:
print(packet.summary())


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

##### Пример: Отправка TCP пакета с данными

# Создание TCP пакета с пользовательскими данными
tcp_packet = IP(dst="192.168.1.1")/TCP(dport=80, flags="S")/Raw(load="GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")
# Отправка пакета
send(tcp_packet)


### Полезные функции

- show(): Отображает содержимое пакета.
- summary(): Краткое описание пакета.
- hexdump(): Отображает пакет в шестнадцатеричном формате.

### Заключение

Scapy — мощный инструмент для работы с сетевыми пакетами, который позволяет выполнять множество операций, включая создание, отправку, анализ и захват пакетов. Используйте его ответственно и в рамках закона!

Python для новичков

10 Oct, 03:23


### Шпаргалка по pywinauto

pywinauto — это библиотека для автоматизации GUI приложений в Windows. Она позволяет автоматически управлять окнами приложений, нажимать кнопки, вводить текст, выбирать элементы и т.д.

#### Установка:
pip install pywinauto


## Основные компоненты:

- Application: Представляет собой приложение, с которым вы будете работать.
- WindowSpecification: Представляет окно или элемент управления.

## Подключение к приложению:

1. Запуск приложения через pywinauto:
   from pywinauto import Application

app = Application(backend="win32").start("notepad.exe")


2. Подключение к уже запущенному процессу:
   app = Application(backend="win32").connect(process=1234)  # по PID
app = Application(backend="win32").connect(path="notepad.exe") # по имени исполняемого файла


Backend:
- "win32" — для большинства классических приложений Windows.
- "uia" — для приложений на основе UIAutomation (WPF, UWP и т.д.).

## Основные операции с окнами:

### Получение окна:

1. По заголовку окна:
   dlg = app.window(title="Untitled - Notepad")


2. По частичному совпадению заголовка:
   dlg = app.window(title_re=".*Notepad.*")  # регулярное выражение


3. По классу окна:
   dlg = app.window(class_name="Notepad")


### Действия с окнами:

1. Ожидание открытия окна:
   dlg.wait("exists", timeout=10)  # ждет 10 секунд, пока окно не появится


2. Активация окна:
   dlg.set_focus()


3. Минимизация, максимизация и закрытие:
   dlg.minimize()
dlg.maximize()
dlg.close()


4. Получение текста заголовка окна:
   title = dlg.window_text()


### Работа с элементами управления:

1. Нажатие кнопки:
   dlg.Button.click()
dlg.child_window(title="OK").click() # через child_window


2. Ввод текста в текстовое поле:
   dlg.Edit.type_keys("Hello, World!")


Примечание: Также можно использовать метод send_keys для более точных симуляций клавиатуры.

3. Выбор элемента в ComboBox:
   dlg.ComboBox.select("Item 1")


4. Установка флажка (CheckBox):
   dlg.CheckBox.check()
dlg.CheckBox.uncheck()


5. Получение текста из элемента:
   text = dlg.Static.texts()


### Действия с меню:

1. Доступ к меню:
   dlg.menu_select("Файл->Сохранить как")


2. Переход к пунктам меню по индексу:
   dlg.menu_select("Файл[0]->Выход[5]")  # через индексы


### Работа с диалоговыми окнами:

1. Открытие диалогового окна (например, "Открыть файл"):
   dlg.menu_select("Файл->Открыть...")


2. Взаимодействие с диалогом открытия файла:
   open_dlg = app.window(title_re=".*Открыть.*")
open_dlg.Edit.type_keys("C:\\path_to_file.txt")
open_dlg.Open.click()


### Получение информации об элементах:

1. Получение списка всех элементов:
   dlg.print_control_identifiers()


2. Поиск элемента по контролу:
   btn = dlg.child_window(auto_id="12345")
btn.click()

Python для новичков

05 Oct, 06:01


Шпаргалка по библиотеке imaplib в Python, которая включает основные операции с IMAP-сервером, такие как подключение, аутентификация, чтение и отправка писем, а также пример кода для каждой операции.

### Установка
Для работы с imaplib не требуется дополнительная установка, так как это стандартная библиотека Python. Однако, для работы с электронной почтой может понадобиться модуль email для обработки содержимого писем.

### Основные операции с imaplib

#### 1. Подключение к IMAP-серверу

import imaplib

# Укажите адрес вашего IMAP-сервера и порт
IMAP_SERVER = 'imap.example.com'
EMAIL_ACCOUNT = '[email protected]'
PASSWORD = 'your_password'

# Создаем объект IMAP
mail = imaplib.IMAP4_SSL(IMAP_SERVER)

# Вход в учетную запись
mail.login(EMAIL_ACCOUNT, PASSWORD)


#### 2. Получение списка папок

# Получаем список папок (почтовых ящиков)
status, folders = mail.list()
print(folders)


#### 3. Выбор папки (например, "INBOX")

# Выбор папки "INBOX"
mail.select('INBOX')


#### 4. Поиск писем

# Поиск писем по заданному критерию (например, все непрочитанные)
status, messages = mail.search(None, 'UNSEEN')

# messages - это строка с номерами писем, разделенными пробелом
email_ids = messages[0].split()
print(email_ids) # Список ID непрочитанных писем


#### 5. Чтение письма

# Чтение первого непрочитанного письма
if email_ids:
latest_email_id = email_ids[0] # ID первого непрочитанного письма
status, msg_data = mail.fetch(latest_email_id, '(RFC822)') # Получаем полное сообщение
raw_email = msg_data[0][1] # raw_email - это сырое содержимое письма
print(raw_email.decode('utf-8')) # Декодируем и выводим содержимое


#### 6. Удаление письма

# Удаление письма
if email_ids:
mail.store(latest_email_id, '+FLAGS', '\\Deleted') # Помечаем письмо как удаленное
mail.expunge() # Удаляем помеченные письма


#### 7. Выход и закрытие соединения

# Выход из учетной записи и закрытие соединения
mail.logout()


### Полный пример

Вот полный пример, который объединяет все вышеперечисленные операции:

import imaplib
import email
from email.header import decode_header

# Настройки
IMAP_SERVER = 'imap.example.com'
EMAIL_ACCOUNT = '[email protected]'
PASSWORD = 'your_password'

# Подключаемся к IMAP-серверу
mail = imaplib.IMAP4_SSL(IMAP_SERVER)
mail.login(EMAIL_ACCOUNT, PASSWORD)

# Выбираем папку "INBOX"
mail.select('INBOX')

# Поиск непрочитанных писем
status, messages = mail.search(None, 'UNSEEN')
email_ids = messages[0].split()

# Чтение и вывод непрочитанных писем
for email_id in email_ids:
status, msg_data = mail.fetch(email_id, '(RFC822)')
raw_email = msg_data[0][1]

# Парсим письмо
msg = email.message_from_bytes(raw_email)
subject, encoding = decode_header(msg['Subject'])[0]

if isinstance(subject, bytes):
subject = subject.decode(encoding if encoding else 'utf-8')

print(f'Subject: {subject}')

# Удаляем письмо
mail.store(email_id, '+FLAGS', '\\Deleted')

# Удаляем помеченные письма
mail.expunge()

# Выход из учетной записи
mail.logout()


### Полезные советы

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

Python для новичков

28 Sep, 13:38


Шпаргалка по использованию модуля `configparser` в Python. Этот модуль позволяет читать и записывать конфигурационные файлы в формате INI.

---

## Шпаргалка по configparser

### Установка

configparser является встроенным модулем в Python (начиная с версии 3.0), поэтому установка не требуется. Просто импортируйте его в вашем коде.

import configparser


### Основные операции

#### 1. Создание и запись конфигурационного файла

import configparser

# Создание объекта ConfigParser
config = configparser.ConfigParser()

# Добавление секции и параметров
config['DEFAULT'] = {
'Server': 'smtp.example.com',
'Port': '587'
}

config['USER'] = {
'Username': '[email protected]',
'Password': 'secret'
}

# Запись конфигурации в файл
with open('config.ini', 'w') as configfile:
config.write(configfile)


#### 2. Чтение конфигурационного файла

import configparser

# Создание объекта ConfigParser
config = configparser.ConfigParser()

# Чтение конфигурационного файла
config.read('config.ini')

# Получение значений
server = config['DEFAULT']['Server']
port = config.getint('DEFAULT', 'Port') # Получение значения как int
username = config['USER']['Username']
password = config['USER'].get('Password') # Получение значения, если параметр может отсутствовать

print(server, port, username, password)


### Основные методы

- `ConfigParser()`: Создает новый объект ConfigParser.

- `read(filenames)`: Читает конфигурационные файлы. Можно передать список файлов.

- `write(file)`: Записывает текущую конфигурацию в указанный файл.

- `sections()`: Возвращает список секций в конфигурационном файле.

- `options(section)`: Возвращает список параметров в указанной секции.

- `get(section, option)`: Получает значение параметра как строку.

- `getint(section, option)`: Получает значение параметра как целое число.

- `getfloat(section, option)`: Получает значение параметра как число с плавающей точкой.

- `getboolean(section, option)`: Получает значение параметра как логическое значение.

- `set(section, option, value)`: Устанавливает значение параметра.

- `remove_option(section, option)`: Удаляет параметр из секции.

- `add_section(section)`: Добавляет новую секцию.

- `remove_section(section)`: Удаляет указанную секцию.

### Пример конфигурационного файла (config.ini)

[DEFAULT]
Server = smtp.example.com
Port = 587

[USER]
Username = [email protected]
Password = secret

[SETTINGS]
EnableFeatureX = True


### Обработка ошибок

- Проверка существования секции или параметра:
  if config.has_section('USER'):
print('Секция USER существует')

if config.has_option('USER', 'Username'):
print('Параметр Username существует')


- Обработка исключений:
  try:
value = config['USER']['NonExistentOption']
except KeyError:
print('Параметр не найден')


### Примечания

- По умолчанию секции и параметры регистронезависимы.
- Для изменения поведения (например, работа с регистром) можно использовать методы optionxform или переопределить их.
- В configparser можно использовать комментарии, начиная строку с # или ;.

Python для новичков

28 Sep, 00:56


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

---

## Шпаргалка по virtualenv

### Установка virtualenv

1. Установка через pip:
   pip install virtualenv


2. Проверка установки:
   virtualenv --version


### Создание виртуального окружения

1. Создание нового виртуального окружения:
   virtualenv <имя_окружения>

Пример:
   virtualenv myenv


2. Создание окружения с определённой версией Python:
   virtualenv -p /usr/bin/python3.8 <имя_окружения>

Пример:
   virtualenv -p python3.8 myenv


### Активация виртуального окружения

- Windows:
   .\myenv\Scripts\activate


- Linux/Mac:
   source myenv/bin/activate


### Деактивация виртуального окружения

deactivate


### Установка пакетов в виртуальном окружении

1. После активации окружения:
   pip install <имя_пакета>

Пример:
   pip install requests


2. Проверка установленных пакетов:
   pip list


3. Сохранение зависимостей в файл:
   pip freeze > requirements.txt


4. Установка зависимостей из файла:
   pip install -r requirements.txt


### Удаление виртуального окружения

Просто удалите папку окружения:
rm -rf myenv  # Linux/Mac
rmdir /S /Q myenv # Windows


### Дополнительные команды

- Создание окружения с использованием `--no-site-packages` (по умолчанию уже изолировано):
   virtualenv --no-site-packages <имя_окружения>


- Список доступных опций:
   virtualenv --help


### Примечания

- После активации виртуального окружения, все команды pip и python будут относиться к этому окружению, пока оно активно.
- Для удобства можно добавить активацию окружения в requirements.txt или использовать Pipenv или Poetry для управления зависимостями и окружениями.

Python для новичков

27 Sep, 20:06


https://habr.com/ru/articles/837936/

Python для новичков

26 Sep, 16:59


😶Новейшая версия ChatGPT O1 значительно превосходит предыдущие поколения по точности и производительности. По данным последних тестов:

- В соревнованиях по программированию (Codeforces) O1 достиг ошеломляющего результата — 89% по точности, что почти в 8 раз больше, чем у gpt4.0.

Купить общий аккаунт с Chat GPT Plus за 249₽ с гарантией, вместо 2499₽ можно у @remeje
❗️1 Человеку за отзыв

Python для новичков

26 Sep, 09:20


### Шпаргалка по модулю cryptography в Python

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

#### Установка модуля
pip install cryptography


### Основные компоненты модуля cryptography

1. Фернэт (Fernet)
2. Ассиметричное шифрование
3. Хэширование

### 1. Фернэт (Fernet)

Fernet - это симметричный алгоритм шифрования, который обеспечивает конфиденциальность и целостность данных.

#### Генерация ключа
from cryptography.fernet import Fernet

key = Fernet.generate_key()
print(key)


#### Шифрование данных
from cryptography.fernet import Fernet

key = Fernet.generate_key()
cipher_suite = Fernet(key)

# Шифрование
text = b"Hello, World!"
cipher_text = cipher_suite.encrypt(text)
print(cipher_text)


#### Дешифрование данных
# Дешифрование
plain_text = cipher_suite.decrypt(cipher_text)
print(plain_text)


### 2. Ассиметричное шифрование

Ассиметричное шифрование использует пару ключей: публичный и приватный. Пример использования RSA.

#### Генерация ключей RSA
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization

private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048
)

public_key = private_key.public_key()

# Сохранение приватного ключа
private_pem = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption()
)

# Сохранение публичного ключа
public_pem = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)

print(private_pem)
print(public_pem)


#### Шифрование данных с использованием публичного ключа
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes

message = b"Secret message"
cipher_text = public_key.encrypt(
message,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print(cipher_text)


#### Дешифрование данных с использованием приватного ключа
plain_text = private_key.decrypt(
cipher_text,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print(plain_text)


### 3. Хэширование

Хэширование используется для создания уникального идентификатора данных.

#### Создание хэша
from cryptography.hazmat.primitives import hashes

digest = hashes.Hash(hashes.SHA256())
digest.update(b"Hello, World!")
hash_value = digest.finalize()
print(hash_value)


### Примеры использования

#### Генерация и проверка цифровой подписи
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes

# Подпись данных
signature = private_key.sign(
b"Sign this message",
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)

# Проверка подписи
try:
public_key.verify(
signature,
b"Sign this message",
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
print("Signature is valid.")
except:
print("Signature is invalid.")


Эта шпаргалка предоставляет основные примеры использования модуля cryptography. Вы можете адаптировать и расширять эти примеры в зависимости от ваших конкретных требований.

Python для новичков

24 Sep, 11:36


Краткое руководство по Flask — микрофреймворку на Python для создания веб-приложений.

### Установка Flask
Установите Flask через pip:
pip install flask


### Создание Простого Приложения
Создайте файл app.py:
from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
return 'Hello, Flask!'

if __name__ == '__main__':
app.run(debug=True)


Запустите приложение:
python app.py


### Основные Компоненты
1. Маршруты (Routes)
    @app.route('/about')
def about():
return 'About Page'


2. Переменные в URL
    @app.route('/user/<username>')
def show_user_profile(username):
return f'User {username}'


3. Методы HTTP-запросов
    @app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return 'Do the login'
else:
return 'Show the login form'


### Работа с Формами и Запросами
1. Получение данных из формы
    from flask import request

@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
return f'Username: {username}, Password: {password}'


2. Перенаправления и URL для именованных маршрутов
    from flask import redirect, url_for

@app.route('/admin')
def admin():
return redirect(url_for('home'))


### Шаблоны
1. Использование Jinja2 шаблонов
Создайте папку templates и добавьте файл index.html:
    <!doctype html>
<html>
<head><title>Hello</title></head>
<body>
<h1>Hello, {{ name }}!</h1>
</body>
</html>


В app.py:
    from flask import render_template

@app.route('/hello/<name>')
def hello(name):
return render_template('index.html', name=name)


### Статические Файлы
Создайте папку static и добавьте CSS или JavaScript файлы. Например, style.css:
body {
background-color: #f0f0f0;
}


В шаблоне (например, index.html):
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='style.css') }}">


### Работа с Базой Данных
1. Подключение SQLite через SQLAlchemy
    pip install flask_sqlalchemy


В app.py:
    from flask_sqlalchemy import SQLAlchemy

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(150), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)

if __name__ == '__main__':
app.run(debug=True)


### Расширения Flask
1. Flask-WTF для форм:
    pip install flask-wtf


Пример использования:
    from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired

class LoginForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])
submit = SubmitField('Login')


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

Python для новичков

23 Sep, 04:03


https://habr.com/ru/articles/844622/