Работаем с буфером обмена
Здесь всё просто: есть пакет
В этом пакете есть две основные функции —
Таким образом, можно прямо через код копировать вывод программы в буфер обмена вместо того, чтобы делать это вручную.
#python #pyperclip
Здесь всё просто: есть пакет
pyperclip, который позволяют отправлять текст в буфер обмена вашего компьютера и получать его оттуда.В этом пакете есть две основные функции —
copy() и paste(), по названию которых понятно их предназначения.Таким образом, можно прямо через код копировать вывод программы в буфер обмена вместо того, чтобы делать это вручную.
#python #pyperclip
👎1🔥1
Поверхностное копирование
Копирование объектов может быть «поверхностное» (shallow) или «глубокое» (deep). Различия между ними заключаются в том, как обрабатываются вложенные объекты.
При поверхностном копировании создается новый объект, но его внутренние элементы (если они тоже являются объектами) остаются ссылками на те же объекты, что и в оригинале. Другими словами, копируются только ссылки на объекты, но не сами объекты.
#python
Копирование объектов может быть «поверхностное» (shallow) или «глубокое» (deep). Различия между ними заключаются в том, как обрабатываются вложенные объекты.
При поверхностном копировании создается новый объект, но его внутренние элементы (если они тоже являются объектами) остаются ссылками на те же объекты, что и в оригинале. Другими словами, копируются только ссылки на объекты, но не сами объекты.
#python
🔥2👎1
Паттерн проектирования Singleton
Одиночка или же синглтон – это паттерн проектирования, описывающий объект, у которого имеется один единственный экземпляр.
Метод
В примере мы проверяем, есть ли значение у атрибута
То есть при вызове конструктора класса
#классы #паттерны
Одиночка или же синглтон – это паттерн проектирования, описывающий объект, у которого имеется один единственный экземпляр.
Метод
__new__ вызывается для создания экземпляра класса, перед вызовом __init__. На вход первым аргументом метод принимает сам класс, а возвращать должен уже экземпляр (даже можно экземпляр и другого класса).В примере мы проверяем, есть ли значение у атрибута
instance. Если нет, то присваиваем атрибуту экземпляр этого же класса. А если уже экземпляр создан, то просто его возвращаем.То есть при вызове конструктора класса
Singleton, будет возвращаться один и тот же объект из памяти.#классы #паттерны
👎4❤1
Генераторы
Функции-генераторы выглядят как и обычные, но вместо
Вызов подобной функции вернёт не значение, а объект генератора. Далее из этого объекта можно получать значения, например, с помощью функции
Если генератору больше нечего возвращать, то будет вызвано исключение
#генераторы
Функции-генераторы выглядят как и обычные, но вместо
return содержат выражения с ключевым словом yield для последовательного генерирования значений.Вызов подобной функции вернёт не значение, а объект генератора. Далее из этого объекта можно получать значения, например, с помощью функции
next или циклом for.Если генератору больше нечего возвращать, то будет вызвано исключение
StopIteration. В целом, генератор — это особый, более изящный случай итератора.#генераторы
👍2👎1
🌐 Копирование веб-содержимого в Python с библиотекой pywebcopy
Библиотека
Пример кода:
В данном примере используется функция
Библиотека💻
#python #pywebcopy
Библиотека
pywebcopy облегчает автоматизацию процесса загрузки веб-содержимого, что может быть полезным при создании веб-скраперов, загрузчиков или других приложений, требующих копирования данных из Интернета.Пример кода:
from pywebcopy import save_webpage
url = 'https://www.example.com'
target_folder = 'path/to/folder'
save_webpage(url, target_folder)
В данном примере используется функция
save_webpage для копирования веб-содержимого указанной веб-страницы (url) в указанную целевую папку (target_folder).Библиотека
pywebcopy предоставляет простой и удобный способ копирования веб-содержимого прямо из Python. Она может быть полезна при создании скриптов для загрузки данных с веб-страниц, автоматизации сбора информации или создании зеркал сайтов. #python #pywebcopy
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2👎1
Асинхронно скачиваем файлы
Имея список ссылок на картинки, которые нужно скачать, мы можем это сделать используя простой цикл
Но в таких ситуациях как эта (скачивание огромного количества небольших файлов) распараллеливание задачи существенно ускорит процесс.
Для этого воспользуемся функцией ThreadPoolExecutor из стандартного пакета
Далее метод
Но будьте внимательны: так как скачивание файла — это IO-операция, такой метод не ускоряет вычисления кода. Он лишь позволяет запустить скачивание следующего файла, не дождавшись пока скачается предыдущий.
#python #threading
Имея список ссылок на картинки, которые нужно скачать, мы можем это сделать используя простой цикл
for, тем самым скачав их последовательно одна за одной. Но в таких ситуациях как эта (скачивание огромного количества небольших файлов) распараллеливание задачи существенно ускорит процесс.
Для этого воспользуемся функцией ThreadPoolExecutor из стандартного пакета
concurrent.futures. Она позволяет запустить нашу функцию, в нескольких екземплярах в параллельных потоках. В конструкторе необходимо указать максимальное количество потоков, которые будут одновременно запущены. Далее метод
.map(download, urls) создает екземпляры нашей функции для скачивания файла, и раскидывает в них элементы списка urls. Но будьте внимательны: так как скачивание файла — это IO-операция, такой метод не ускоряет вычисления кода. Он лишь позволяет запустить скачивание следующего файла, не дождавшись пока скачается предыдущий.
#python #threading
👎2👍1
Использование wget в Python для загрузки файлов
Этот код загрузит файл по указанному URL и сохранит его в текущей директории.
#python #wget
wget — это CLI инструмент для загрузки контента из сети, который можно эффективно использовать через Python. Хотя Python не имеет встроенной поддержки wget, можно использовать модуль wget, который облегчает загрузку файлов.Этот код загрузит файл по указанному URL и сохранит его в текущей директории.
#python #wget
👎3
Упаковка параметров с помощью urlencode
Довольно часто приходится работать с разнообразными API и совершать get-запросы с передачей множества параметров. Чаще всего составление запроса в коде выглядит примерно так:
Смотрится не слишком презентабельно, однако есть слегка более длинный, но значительно улучающий читаемость кода вариант – функция
Довольно часто приходится работать с разнообразными API и совершать get-запросы с передачей множества параметров. Чаще всего составление запроса в коде выглядит примерно так:
url = 'https://example.com?item={}&size={}&color={}&amount={}'.format('t-shirt', 'M', 'white', 5)Смотрится не слишком презентабельно, однако есть слегка более длинный, но значительно улучающий читаемость кода вариант – функция
urlencode из из модуля urllib.👍4👎2
Удаление страниц PDF-файла
Библиотека PyMuPDF включает в себя довольно много сложных методов, которые упрощают удаление страниц из файла PDF. Он позволяет указать либо одну страницу (используя метод deletePage()), либо диапазон номеров страниц (используя метод deletePageRange()), либо список с номерами страниц (используя метод select()).
В следующем примере показано, как использовать список для выбора страниц, которые нужно сохранить в исходном документе. Имейте в виду, что страницы, которые не указаны, не будут частью выходного документа. В нашем случае выходной документ содержит только первую, вторую и четвертую страницы.
#python
Библиотека PyMuPDF включает в себя довольно много сложных методов, которые упрощают удаление страниц из файла PDF. Он позволяет указать либо одну страницу (используя метод deletePage()), либо диапазон номеров страниц (используя метод deletePageRange()), либо список с номерами страниц (используя метод select()).
В следующем примере показано, как использовать список для выбора страниц, которые нужно сохранить в исходном документе. Имейте в виду, что страницы, которые не указаны, не будут частью выходного документа. В нашем случае выходной документ содержит только первую, вторую и четвертую страницы.
#python
👍3❤1👎1
Упаковка параметров с помощью urlencode
Довольно часто приходится работать с разнообразными API и совершать get-запросы с передачей множества параметров. Чаще всего составление запроса в коде выглядит примерно так:
Смотрится не слишком презентабельно, однако есть слегка более длинный, но значительно улучающий читаемость кода вариант – функция
Довольно часто приходится работать с разнообразными API и совершать get-запросы с передачей множества параметров. Чаще всего составление запроса в коде выглядит примерно так:
url = 'https://example.com?item={}&size={}&color={}&amount={}'.format('t-shirt', 'M', 'white', 5)Смотрится не слишком презентабельно, однако есть слегка более длинный, но значительно улучающий читаемость кода вариант – функция
urlencode из из модуля urllib.👎2❤1
Вау, вот это скорость разработки!
На GitVerse появилось зеркало PyPI — теперь Python‑пакеты доступны, даже если upstream PyPI упадёт или станет недоступен.
Ставьте зеркало как основной источник или держите как резерв. Рассказали, как это сделать, здесь!
На GitVerse появилось зеркало PyPI — теперь Python‑пакеты доступны, даже если upstream PyPI упадёт или станет недоступен.
Ставьте зеркало как основной источник или держите как резерв. Рассказали, как это сделать, здесь!
👎5🔥1
3 трюка с itertools
Сегодня мы рассмотрим несколько функций из довольно полезного модуля, позволяющих эффективно работать с итерируемыми объектами. Начнём с очень простой функции –
Далее,
А для того, чтобы создавать комбинации из элементов выбранного итерируемого объекта, вам понадобится функция
#модули #itertools
Сегодня мы рассмотрим несколько функций из довольно полезного модуля, позволяющих эффективно работать с итерируемыми объектами. Начнём с очень простой функции –
chain. Она позволяет "склеивать" несколько итерируемых элементов в один.Далее,
accumulate. Эта функция немного похожа на reduce, но вместо того, чтобы давать одно окончательное значение, она последовательно применяет функцию, заданную вторым аргументом (в данном случае min), к каждому последующему элементу по порядку: min(11), min(11, 3), min(11, 3, 9) и так далее.А для того, чтобы создавать комбинации из элементов выбранного итерируемого объекта, вам понадобится функция
combinations. Вторым аргументом можно задать длину этой самой комбинации.#модули #itertools
👍3👎1
Возврат нескольких значений из функции
Знаете ли вы, что можно осуществлять возврат нескольких значений из функции? Вот как это сделать. Ознакомьтесь с приведенным выше примером кода.
#python
Знаете ли вы, что можно осуществлять возврат нескольких значений из функции? Вот как это сделать. Ознакомьтесь с приведенным выше примером кода.
#python
👎6
Важное про цифры и Юникод
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 — не единственные символы, которые считаются цифрами. Python следует правилам Юникода и обрабатывает несколько сотен символов как цифры. Полный список находится здесь.
Это крайне важно знать, потому что эти символы влияют на такие функции, как
Думаю, в один момент это знание сэкономит вам время на исправление "бага" с такими странными символами. Предупрежден — значит вооружен.
#числа #юникод
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 — не единственные символы, которые считаются цифрами. Python следует правилам Юникода и обрабатывает несколько сотен символов как цифры. Полный список находится здесь.
Это крайне важно знать, потому что эти символы влияют на такие функции, как
int, unicode.isdecimal и даже re.match.Думаю, в один момент это знание сэкономит вам время на исправление "бага" с такими странными символами. Предупрежден — значит вооружен.
#числа #юникод
❤4👎2👍1
Explicit Conversion Flag
Флаг явного преобразования используется для преобразования значения поля
Это поле можно использовать для переопределения поведения
В примере, в случае с флагом
#repr #str #format
Флаг явного преобразования используется для преобразования значения поля
format перед его непосредственным форматированием.Это поле можно использовать для переопределения поведения
format для какого либо конкретного типа и форматирования значения. В настоящее время распространены два явных флага преобразования:!r – преобразует значение в строку, используя функцию repr()!s – преобразует значение в строку, используя функцию str()В примере, в случае с флагом
!r строка 'Hello' будет напечатана с кавычками в поле шириной не менее 20 символов, а в случае с флагом !s – без кавычек (в более удобном для чтения виде).#repr #str #format
👍3👎2
Сравнение двух аудиосообщений с использованием библиотеки Librosa
Важные замечания:
— Для точного сравнения аудиозаписей они должны иметь одинаковую продолжительность и аналогичные условия записи (громкость, уровень шума и т.д.).
— Возможно потребуется дополнительная предварительная обработка, например, нормализация громкости.
#python #librosa
Librosa — библиотека, которая обеспечивает анализ и обработку звука. Сравнение производится путем вычисления характеристик MFCC (Mel Frequency Cepstral Coefficients), описывающих звуковую сигнатуру каждого аудио.Важные замечания:
— Для точного сравнения аудиозаписей они должны иметь одинаковую продолжительность и аналогичные условия записи (громкость, уровень шума и т.д.).
— Возможно потребуется дополнительная предварительная обработка, например, нормализация громкости.
#python #librosa
👍1👎1
Читаем текст с картинки используя Tesseract от Google
Чтобы извлечь текст из изображения, используйте метод
Рекомендуется использовать библиотеку
Пример кода:
#python #pytesseract
Google разработал систему Tesseract для извлечения текста из изображений через оптическое распознавание символов.Pytesseract - это удобная оболочка для системы Tesseract, облегчающая её использование.Чтобы извлечь текст из изображения, используйте метод
image_to_string. Для работы с русским текстом укажите аргумент lang как 'rus'.Рекомендуется использовать библиотеку
pillow для открытия изображений, хотя можно также просто указать путь к файлу.Пример кода:
from PIL import Image
import pytesseract
# Открываем изображение с помощью Pillow
image = Image.open('image.jpg')
# Используем pytesseract для извлечения текста
text = pytesseract.image_to_string(image, lang='rus')
print(text)
#python #pytesseract
👍2👎1
Рабочее приложение, которое прошло ревью, всё ещё можно взломать через форму логина.
Большинство уязвимостей в вебе — это типовые ошибки, которые находят уже после инцидента. Курс WAPT от Codeby учит находить их раньше — с позиции атакующего.
Этот курс максимально заточен на практику: 65 заданий в лаборатории, где вы отрабатываете каждую технику на реальных сценариях.
Что внутри:
• Эксплуатация актуальных классов уязвимостей, активный и пассивный фаззинг
• SQL Injection, CMD Injection, XSS, PHP Injection, Server-Side Template Injection
• Повышение привилегий и client-side атаки (XSS, CSRF)
Каждую неделю — вебинары с куратором.
Навыки применимы и в рабочих задачах по пентесту, и в Bug Bounty. Курс стартует 16 июля.
Запись на курс
По всем вопросам: @CodebyAcademyBot
Большинство уязвимостей в вебе — это типовые ошибки, которые находят уже после инцидента. Курс WAPT от Codeby учит находить их раньше — с позиции атакующего.
Этот курс максимально заточен на практику: 65 заданий в лаборатории, где вы отрабатываете каждую технику на реальных сценариях.
Что внутри:
• Эксплуатация актуальных классов уязвимостей, активный и пассивный фаззинг
• SQL Injection, CMD Injection, XSS, PHP Injection, Server-Side Template Injection
• Повышение привилегий и client-side атаки (XSS, CSRF)
Каждую неделю — вебинары с куратором.
Навыки применимы и в рабочих задачах по пентесту, и в Bug Bounty. Курс стартует 16 июля.
Запись на курс
По всем вопросам: @CodebyAcademyBot
👍2❤1👎1🔥1
Сохранение документации функции при декорировании
У декораторов существует ряд проблем, одна из которых заключается в том, что, после оборачивания функции в декоратор, на выходе мы не можем получить информацию атрибутов
Вместо значений данных атрибутов исходной функции мы будем получать значения функции обертки.
Для решения этой проблемы можно воспользоваться декоратором
#декораторы #wraps
У декораторов существует ряд проблем, одна из которых заключается в том, что, после оборачивания функции в декоратор, на выходе мы не можем получить информацию атрибутов
__name__ и __doc__, нужные для документации функции. Вместо значений данных атрибутов исходной функции мы будем получать значения функции обертки.
Для решения этой проблемы можно воспользоваться декоратором
functools.wraps, применяя его к обертке нашего декоратора. В результате имя и сигнатура функции, передаваемой в декоратор, будут копироваться в обертку.#декораторы #wraps
👍1👎1
asyncio: Асинхронное программирование на Python
Для начала работы с
Одной из причин использовать
Дополнительная информация о
asyncio - это библиотека, разработанная специально для асинхронного программирования и управления параллельными задачами. Она предоставляет инструменты для эффективной работы с асинхронными операциями, позволяя создавать быстрые и отзывчивые приложения.Для начала работы с
asyncio, вам необходимо импортировать библиотеку, и вы сразу получаете доступ к асинхронным функциям и ключевым словам, таким как async и await. Это делает возможным создание асинхронных функций, которые могут выполняться параллельно, без блокировки основного потока выполнения.Одной из причин использовать
asyncio является его способность эффективно обрабатывать большое количество параллельных задач, что делает его идеальным решением для сетевых операций, ввода/вывода и других операций, которые могут вызвать задержку. Вы можете легко создавать и использовать уже готовые асинхронные HTTP-клиенты (например, с использованием aiohttp и httpx), веб-серверы и веб-скраперы, которые будут быстро обрабатывать большие объемы данных.Дополнительная информация о
asyncio, такая как работа с очередями, ивент-лупы, обработка ошибок и другие возможности, доступна в официальной документации Python.👍3❤2👎2