es
Feedback
Python для начинающих

Python для начинающих

Ir al canal en Telegram

Python для начинающих

Mostrar más
1 241
Suscriptores
+124 horas
+27 días
+430 días
Archivo de publicaciones
Привет! Сегодня мы поговорим о настоящей рабочей лошадке в мире обработки данных — модуле csv из стандартной библиотеки Python. Если вы только начинаете погружаться в программирование, то CSV — это один из первых форматов, с которым вы обязательно столкнётесь. Банка Excel? Массивы данных с температурой за 20 лет? Цены акций? Всё это часто лежит в формате CSV. И Python умеет с этим работать очень изящно. 🚀 Что такое CSV? CSV (Comma-Separated Values) — это простой текстовый формат, в котором каждая строка — это запись, а поля разделены запятыми (или другим символом-разделителем). Удобно, читается любым текстовым редактором, легко обрабатывается. И вот тут приходит модуль csv — он умеет читать, записывать и аккуратно работать с данными из CSV-файлов. Причём делает это проще, чем кажется! 📥 Пример 1: базовое чтение CSV Допустим, у нас есть файл data.csv с таким содержимым: name,age,city Alice,30,London Bob,25,New York Читаем этот файл в Python: import csv with open('data.csv', newline='', encoding='utf-8') as file: reader = csv.reader(file) for row in reader: print(row) Вывод: 'name', 'age', 'city' 'Alice', '30', 'London' 'Bob', '25', 'New York' Важно: параметр newline='' нужен для корректной обработки переноса строк, особенно на Windows. encoding='utf-8' — чтобы не ругался на юникод. 📌 Лучшие практики: - Обязательно используйте with для открытия файлов — так файл закроется автоматически, даже если что-то пойдёт не так. - Никогда не полагайтесь на то, что разделитель всегда запятая. Лучше явно указать delimiter, если файл нестандартного формата. 📥 Пример 2: чтение с использованием словарей (идентификаторы — это красиво!) import csv with open('data.csv', newline='', encoding='utf-8') as file: reader = csv.DictReader(file) for row in reader: print(row'name', 'lives in', row'city') Вывод: Alice lives in London Bob lives in New York DictReader — это просто магия: он превращает строки в словари, где ключи — это названия столбцов. Удобно и читаемо. 🛠 Пример 3: запись в CSV newdata = [ {'name': 'Charlie', 'age': 28, 'city': 'Berlin'}, {'name': 'Diana', 'age': 32, 'city': 'Paris'} ] with open('output.csv', mode='w', newline='', encoding='utf-8') as file: fieldnames = ['name', 'age', 'city'] writer = csv.DictWriter(file, fieldnames=fieldnames) writer.writeheader() writer.writerows(newdata) Этот код создаст новый файл output.csv с указанными строками. DictWriter — ещё одна удобная обёртка, позволяющая красиво и структурированно экспортировать данные. ✅ Несколько полезных советов: - Если данные разделяются не запятыми, указывайте параметр delimiter, например: csv.reader(file, delimiter=';'). - Пустые строки? Передавайте параметр skipinitialspace=True, чтобы не было проблем с лишними пробелами. - Часто приходится работать с числовыми значениями — не забудьте конвертировать строку: int(row'age') или float(...). 📎 И напоследок: CSV — это просто. С ним справится даже начинающий программист, и это отличная практика для понимания работы с файлами, структурами данных и базовой автоматизации. Используйте модуль csv на полную: он даже в 2024 году не теряет своей актуальности. До встречи в следующем посте!

Чтение и обработка CSV-файлов с помощью модуля csv: примеры и лучшие практики
Чтение и обработка CSV-файлов с помощью модуля csv: примеры и лучшие практики

Как создавать приложения на основе событий с использованием ReactiveX
Как создавать приложения на основе событий с использованием ReactiveX

Как создавать приложения на основе событий с использованием ReactiveX
Как создавать приложения на основе событий с использованием ReactiveX

Как создавать приложения на основе событий с использованием ReactiveX
Как создавать приложения на основе событий с использованием ReactiveX

Как создавать приложения на основе событий с использованием ReactiveX
Как создавать приложения на основе событий с использованием ReactiveX

Как создавать приложения на основе событий с использованием ReactiveX
Как создавать приложения на основе событий с использованием ReactiveX

Как создавать приложения на основе событий с использованием ReactiveX
Как создавать приложения на основе событий с использованием ReactiveX

Как создавать приложения на основе событий с использованием ReactiveX
Как создавать приложения на основе событий с использованием ReactiveX

🔐 Реализация базовых шифров с библиотекой Cryptography в Python Шифрование — одна из тех тем, которые звучат как нечто мистическое для новичков. Но на деле, благодаря библиотеке cryptography, реализовать базовые методы шифрования в Python проще, чем испечь бутерброд. Сегодня разберём два практических варианта: симметричное и асимметричное шифрование. Начнём с установки: pip install cryptography Готово? Погружаемся. 🔥 Симметричное шифрование с Fernet Симметричное шифрование — это когда один ключ используется для шифрования и для расшифровки. Как передать ключ другому человеку — другой вопрос. Но именно этот подход используется в большинстве локальных шифровок (например, защищённые файлы на вашем диске). Модуль Fernet из cryptography делает весь процесс элементарным: from cryptography.fernet import Fernet # Генерация ключа key = Fernet.generatekey() cipher = Fernet(key) # Шифруем текст originaltext = b'This is a secret message.' encryptedtext = cipher.encrypt(originaltext) # Дешифруем decryptedtext = cipher.decrypt(encryptedtext) print('Encrypted:', encryptedtext) print('Decrypted:', decryptedtext.decode()) Жутко просто, не правда ли? Ключ здесь — это случайная строка байтов (44 символа в base64), и если потеряете — расшифровать будет уже нельзя. Ровно как и задумано. 🔐 Асимметричное шифрование с RSA Симметрия хороша, когда ты работаешь с данными локально. Но что делать, если надо передать зашифрованное сообщение другому человеку? Тут на помощь приходит асимметричное шифрование: два ключа — один публичный, другой приватный. Публичный ключ можно раздавать всем. Всё, что зашифровано с его помощью, сможет расшифровать только владелец приватного ключа. Давайте на практике: from cryptography.hazmat.primitives.asymmetric import rsa, padding from cryptography.hazmat.primitives import serialization, hashes # Генерация пары ключей privatekey = rsa.generateprivatekey(publicexponent=65537, keysize=2048) publickey = privatekey.publickey() # Шифруем с помощью публичного ключа message = b'RSA encryption example.' encrypted = publickey.encrypt( message, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None) ) # Расшифровываем с помощью приватного ключа decrypted = privatekey.decrypt( encrypted, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None) ) print('Encrypted (RSA):', encrypted) print('Decrypted (RSA):', decrypted.decode()) Обрати внимание: здесь используется безопасная схема OAEP, которая делает RSA устойчивым к множеству атак. 💡 Важные моменты - Библиотека cryptography использует низкоуровневые привязки OpenSSL, поэтому она не только удобна, но и достаточно надёжна. - RSA шифрует только короткие сообщения. Для реальной передачи больших данных обычно шифруют симметричным ключом, а его уже шифруют RSA. - Ни Fernet, ни RSA не гарантируют анонимность или защиту от всех атак — это всего лишь строительные блоки. 📦 Вывод Хотя на первый взгляд шифрование может показаться чем-то пугающим, с cryptography ты получаешь мощный инструмент, который легко применять даже на ранней стадии изучения Python. И пусть это только основа, зато какая прочная!

Реализация базовых шифров с библиотекой Cryptography
Реализация базовых шифров с библиотекой Cryptography

https://t.me/info_sol У админа этого канала есть личный блог, в котором он пишет про саморазвитие, нейросети, постит картинки и созданную в нейросетях музыку. Подписывайтесь )

Заголовок: Защищаем файлы Python'ом: антивирусная среда с ClamAV Привет! Сегодня мы рассмотрим, как создать простую, но эффективную среду на Python для скрининга файлов на вирусы — руками программиста, используя бесплатный антивирус ClamAV. Зачем это нужно? Представим: ты разрабатываешь веб-приложение с загрузкой файлов от пользователей. Кто-то может попытаться загрузить вредоносный .exe или .zip-сюрприз. Чтобы не запускать бомбу в своей системе — нужно проверять эти файлы заранее. Здесь на помощь приходит ClamAV — легкий, кроссплатформенный антивирус с поддержкой командной строки. А Python позволяет автоматизировать и вшить проверку в любое приложение. 🔧 Установка ClamAV На большинстве Linux-систем установка простая: sudo apt update sudo apt install clamav clamav-daemon Для обновления вирусных баз: sudo freshclam Если ты на Windows — скачай инсталлятор с сайта проекта (https://www.clamav.net/) и добавь путь до clamscan в системные переменные. 🐍 Работаем из Python Чтобы взаимодействовать с ClamAV из Python, можно использовать модуль subprocess для запуска процесса сканирования через clamscan, а также библиотеку pyclamd, если хочешь использовать daemon-режим. Рассмотрим сначала с subprocess: import subprocess def scanfile(filepath): result = subprocess.run("clamscan", file_path, stdout=subprocess.PIPE, text=True) output = result.stdout if "OK" in output: return "Clean" elif "FOUND" in output: return "Infected" else: return "Unknown" print(scanfile("sample.zip")) Этот код запускает сканирование и парсит результат. Если в выводе встречается “FOUND” — пора бить тревогу. Теперь подход с pyclamd — более быстрый, если у тебя запущен демон ClamAV (clamd): pip install pyclamd import pyclamd def scanwithdaemon(filepath): cd = pyclamd.ClamdUnixSocket() if not cd.ping(): raise ConnectionError("ClamAV daemon is not running.") result = cd.scanfile(filepath) if result is None: return "Clean" else: return "Infected" print(scanwithdaemon("test.pdf")) 🚀 Как использовать Ты можешь встроить этот сканер в Django или Flask-приложение, настроить папку мониторинга (например, сканируем все, что появляется в uploads/) или устроить cron-задачу по расписанию. 🗂 Нюансы - ClamAV не проверяет содержимое архивов “глубоко”, если не установлен параметр --recursive или в clamd.conf не включён ScanArchive. - Производительность: clamd быстрее clamscan, потому что один раз загружает сигнатуры. - Без обновлений баз смысла нет — freshclam должен запускаться регулярно. 📦 Бонус: сканирование всей директории def scandirectory(path): result = subprocess.run(["clamscan", "-r", path], stdout=subprocess.PIPE, text=True) infections = [line for line in result.stdout.split("\n") if "FOUND" in line] return infections infections = scandirectory("/home/user/uploads") for item in infections: print(item) 🔐 Итого: - ClamAV + Python — это реальный способ добавить сканирование на вирусы. - Можно быстро защитить backend загрузки файлов. - Используем subprocess или pyclamd, в зависимости от потребностей. Превратить Python-приложение в антивирусную мини-систему — проще, чем кажется. Рекомендую попробовать на практике — лучше один раз построить, чем сто раз удалить троян.

Как создавать среду для скрининга на вирусы с Python и ClamAV
Как создавать среду для скрининга на вирусы с Python и ClamAV

Как создавать среду для скрининга на вирусы с Python и ClamAV
Как создавать среду для скрининга на вирусы с Python и ClamAV

Привет! Сегодня поговорим о теме, которая звучит так, будто была взята из научной фантастики, но на деле имеет массу практического применения — генетические алгоритмы. Если ты когда-нибудь задумывался, как можно применять принципы естественного отбора для решения задач оптимизации — читай дальше. Мы познакомимся с удивительной библиотекой DEAP (Distributed Evolutionary Algorithms in Python), которая делает работу с эволюционными алгоритмами на Python простой и вдохновляющей. Зачем вообще нужны генетические алгоритмы? Представь, что тебе нужно найти оптимальное решение в огромном пространстве возможных вариантов — классический перебор займёт вечность. Генетические алгоритмы работают по-другому: они "эволюционируют" популяцию решений, отбирая лучших "индивидов", скрещивая их и мутируя. Этот подход широко используется в инженерии, дизайне нейросетей, игровой индустрии и даже в экономике. Теперь к практике. Устанавливаем DEAP: pip install deap Допустим, мы хотим найти максимум функции: f(x) = x sin(x), где x от 0 до 10 Вот пример минимального рабочего кода на DEAP: from deap import base, creator, tools, algorithms import random import math # Создаем типы для нашей задачи creator.create("FitnessMax", base.Fitness, weights=(1.0,)) creator.create("Individual", list, fitness=creator.FitnessMax) toolbox = base.Toolbox() # Гене — это просто одно число toolbox.register("attr_float", random.uniform, 0, 10) toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_float, 1) toolbox.register("population", tools.initRepeat, list, toolbox.individual) # Целевая функция def evaluate(individual): x = individual[0] return x math.sin(x), toolbox.register("evaluate", evaluate) toolbox.register("mate", tools.cxBlend, alpha=0.5) toolbox.register("mutate", tools.mutGaussian, mu=0, sigma=1, indpb=0.2) toolbox.register("select", tools.selTournament, tournsize=3) # Запуск эволюции def run(): population = toolbox.population(n=50) stats = tools.Statistics(lambda ind: ind.fitness.values) stats.register("max", max) stats.register("avg", lambda x: sum(x)/len(x)) population, log = algorithms.eaSimple(population, toolbox, cxpb=0.5, mutpb=0.2, ngen=40, stats=stats, verbose=False) best = tools.selBest(population, 1)0 print(f"Best individual: x = {best0:.3f}, f(x) = {evaluate(best)0:.3f}") run() Что здесь происходит: - Мы создаем индивидуумов — списки, содержащие одно число (значение x). - Определяем функцию приспособленности evaluate. - Используем стандартные операторы скрещивания (cxBlend) и мутации (mutGaussian). - Запускаем эволюцию и находим наилучшее решение после 40 поколений. Важно, что DEAP очень гибкий: ты можешь легко подставить свои структуры данных, изменить стратегию отбора, размеры популяции, тип мутации и кроссовера. Хочешь решать задачи с множеством параметров? Просто увеличь длину списка в individual. Несмотря на "биологический" антураж, DEAP — это мощный инструмент, который реально решает впечатляющий спектр задач. Если тебе понадобилось выйти за пределы классических методов оптимизации — самое время попробовать эволюционный подход. До встречи в следующем посте!

Работа с генетическими алгоритмами в Python: библиотека DEAP
Работа с генетическими алгоритмами в Python: библиотека DEAP

Работа с генетическими алгоритмами в Python: библиотека DEAP
Работа с генетическими алгоритмами в Python: библиотека DEAP

Работа с генетическими алгоритмами в Python: библиотека DEAP
Работа с генетическими алгоритмами в Python: библиотека DEAP

Привет, друзья! Сегодня мы нырнём в удивительно простой, но мощный модуль стандартной библиотеки Python — http.server. С его помощью можно всего в несколько строк кода поднять настоящий HTTP-сервер. Без сторонних зависимостей, фреймворков или танцев с бубном. Зачем это нужно? Например, для локальной отладки веб-приложений, быстрой раздачи файлов с вашей машины, тестирования API или даже написания простейшего backend'а. Итак, приступим! Минимальный HTTP-сервер за 10 секунд Внимание, магия! Вот базовый пример:
from http.server import SimpleHTTPRequestHandler, HTTPServer

server_address = ('', 8000)
httpd = HTTPServer(server_address, SimpleHTTPRequestHandler)
print("Server running on http://localhost:8000")
httpd.serve_forever()
Сохрани файл как simpleserver.py, запусти, и зайди в браузере на http://localhost:8000. Ты увидишь содержимое текущей директории — по сути, это файловый сервер “из коробки”. Обратите внимание: - Пустая строка в serveraddress означает, что сервер слушает все IP адреса. - Port 8000 — дефолтный, можно выбрать любой другой. А что если захотим свой ответ, а не просто отдавать файлы? Создадим собственный обработчик:
from http.server import BaseHTTPRequestHandler, HTTPServer

class MyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-Type', 'text/html')
        self.end_headers()
        message = "<h1>Hello, Python HTTP Server!</h1>"
        self.wfile.write(message.encode('utf-8'))

server_address = ('', 8080)
httpd = HTTPServer(server_address, MyHandler)
print("Custom server running on http://localhost:8080")
httpd.serve_forever()
Теперь при любом GET-запросе сервер вернёт простую HTML-страничку. Всё управляется методом doGET. Можно переопределить и другие: doPOST, doPUT, doDELETE. Парсим путь и параметры Допустим, мы хотим разные ответы в зависимости от URL. Используем модуль urllib:
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import urlparse, parse_qs

class MyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        parsed_url = urlparse(self.path)
        path = parsed_url.path
        query = parse_qs(parsed_url.query)

        self.send_response(200)
        self.send_header('Content-Type', 'text/plain')
        self.end_headers()

        if path == '/hello':
            name = query.get('name', ['stranger'])[0]
            response = f"Hello, {name}!"
        else:
            response = "Unknown path."

        self.wfile.write(response.encode('utf-8'))

server_address = ('', 9000)
httpd = HTTPServer(server_address, MyHandler)
print("Query-enabled server running on http://localhost:9000")
httpd.serve_forever()
Попробуйте перейти на http://localhost:9000/hello?name=Alice — сервер ответит: Hello, Alice! Нюансы и ограничения - http.server идеально подходит для простых задач, но не заменит полноценный фреймворк вроде Flask или FastAPI. - Он однопоточный — один запрос за раз. Не подходит для продакшена. - Без HTTPS — только HTTP. Зато: - Не требует установки — есть в любом Python. - Отличен для отладки, обучения и мини-экспериментов. Вывод http.server — как швейцарский нож для любого Python-разработчика. Минимум кода — максимум пользы. Иногда лучшая магия — это простота. До встречи в следующем посте!