3 трюка с itertools
Сегодня мы рассмотрим несколько функций из довольно полезного модуля, позволяющих эффективно работать с итерируемыми объектами. Начнём с очень простой функции –
Далее,
А для того, чтобы создавать комбинации из элементов выбранного итерируемого объекта, вам понадобится функция
#модули #itertools
Сегодня мы рассмотрим несколько функций из довольно полезного модуля, позволяющих эффективно работать с итерируемыми объектами. Начнём с очень простой функции –
chain
. Она позволяет "склеивать" несколько итерируемых элементов в один.Далее,
accumulate
. Эта функция немного похожа на reduce
, но вместо того, чтобы давать одно окончательное значение, она последовательно применяет функцию, заданную вторым аргументом (в данном случае min
), к каждому последующему элементу по порядку: min(11)
, min(11, 3)
, min(11, 3, 9)
и так далее.А для того, чтобы создавать комбинации из элементов выбранного итерируемого объекта, вам понадобится функция
combinations
. Вторым аргументом можно задать длину этой самой комбинации.#модули #itertools
Редирект вывода программы
В
Контекстный менеджер принимает аргумент, в котором мы можем указать, куда должен переправляться весь вывод в последующем блоке.
Таким образом, данные из
Убедится в этом можем, открыв файл заново и прочитав оттуда данные.
#contextlib
В
contextlib
есть еще один прикольный контекстный менеджер — redirect_stdout
, позволяющий перенаправить стандартный вывод программы.Контекстный менеджер принимает аргумент, в котором мы можем указать, куда должен переправляться весь вывод в последующем блоке.
Таким образом, данные из
print()
в контекстом менеджере будут переправлены в открытый ранее файл, так как мы его передали в аргумент redirect_stdout
.Убедится в этом можем, открыв файл заново и прочитав оттуда данные.
#contextlib
Редактируем видео
Пакет
В целом, с пакетом разбораться не сложно, базовое использование показано на картинке. В примере мы открываем два видео, склеиваем их в одно, обрезаем полученный клип, уменьшаем громкость звука и в конце сохраняем результат.
Здесь еще важно отметить, что запуск и выполнение скриптов с обработкой видео может занять относительно большое время.
Такой пакет полезен в случаях, когда требуется обработать очень много видео по одному и тому же принципу.
#moviepy
Пакет
moviepy
позволяет обрезать и склеивать видео, добавлять видеоэффекты, а также редактировать звук. В целом, с пакетом разбораться не сложно, базовое использование показано на картинке. В примере мы открываем два видео, склеиваем их в одно, обрезаем полученный клип, уменьшаем громкость звука и в конце сохраняем результат.
Здесь еще важно отметить, что запуск и выполнение скриптов с обработкой видео может занять относительно большое время.
Такой пакет полезен в случаях, когда требуется обработать очень много видео по одному и тому же принципу.
#moviepy
Отлавливаем баги с assert
При выполнении инструкции
Но если попробовать выполнить инструкцию
Исключения
Также не нужно, к примеру, обрабатывать пользовательский ввод и пытаться обработать исключение
Если в вашем коде будет очень много
#исключения #assert
При выполнении инструкции
assert
с логическим выражением, результат которого равен True
, ничего не произойдет.Но если попробовать выполнить инструкцию
assert
с логическим выражением, которое равно False
, то будет сгенерировано исключение AssertionError
.Исключения
AssertionError
предназначены скорее для отладки. При написании программ на этапе разработки мы можем видеть, что делаем что-то не так (например, передали в метод некорректное значение). Также не нужно, к примеру, обрабатывать пользовательский ввод и пытаться обработать исключение
AssertionError
блоком try-except
.Если в вашем коде будет очень много
assert
'ов, то это затронет и производительность программы.#исключения #assert
Превью из длинного текста
Допустим, у нас есть какой-то длинный текст в виде строки и надо сделать превью этого текста, например, для сайта. Первое, что приходит на ум – использовать слайсинг строк.
Но, как видите, текст оборвался на полуслове, поэтому такой вариант отпадает. Такую проблему хорошо решает метод
Первым аргументом передается строка, вторым указываем количество символов, которое должен содержать результат. Также третьим аргументом можно передать заготовку, которая будет вставляться в конце обрезанной строки.
#строки #textwrap
Допустим, у нас есть какой-то длинный текст в виде строки и надо сделать превью этого текста, например, для сайта. Первое, что приходит на ум – использовать слайсинг строк.
Но, как видите, текст оборвался на полуслове, поэтому такой вариант отпадает. Такую проблему хорошо решает метод
shorten
из модуля textwrap
. Первым аргументом передается строка, вторым указываем количество символов, которое должен содержать результат. Также третьим аргументом можно передать заготовку, которая будет вставляться в конце обрезанной строки.
#строки #textwrap
Получаем текст с картинки
У Google есть система Tesseract, которая позволяет парсить текст с картинок с помощью оптического распознавания символов.
И в качестве обертки над их системой, был создан пакет
Для того, чтобы получить текст с картинки, нужно вызвать метод
Еще важно, что для открытия картинок рекомендуется использовать
#pytesseract
У Google есть система Tesseract, которая позволяет парсить текст с картинок с помощью оптического распознавания символов.
И в качестве обертки над их системой, был создан пакет
pytesseract
, который максимально удобно и легко использовать. Для того, чтобы получить текст с картинки, нужно вызвать метод
image_to_string
. Если вас интересует текст на русском, то следует указать аургмент lang
как 'rus'
. Еще важно, что для открытия картинок рекомендуется использовать
pillow
, хоть и имеется возможность просто указать путь к файлу в виде строки. #pytesseract
Нижнее подчеркивание
В Python имя переменной может состоять из одного подчеркивания. Хотя такое имя не достаточно описательно и не должно использоваться, есть по крайней мере три случая, когда
Первое,
Второе, интерактивный режим использует
Третье, документация модуля
#тонкости
В Python имя переменной может состоять из одного подчеркивания. Хотя такое имя не достаточно описательно и не должно использоваться, есть по крайней мере три случая, когда
_
имеет общепринятый смысл.Первое,
_
используется, когда вам нужно придумать имена для значений, которые вам не нужны — например, в циклах for
.Второе, интерактивный режим использует
_
для хранения результата последнего выполненного выражения.Третье, документация модуля
gettext
рекомендует псевдоним _()
для функции gettext()
, чтобы минимизировать загромождение вашего кода.#тонкости
Скачиваем вебсайты целиком
Максимально простой, но при этом мощный пакет
Функция
А вот
Но здесь надо быть аккуратнее, подобная рекурсивная загрузка отправит много запросов к серверу и может сильно нагрузить его, если на сайте много страниц.
#pywebcopy
Максимально простой, но при этом мощный пакет
pywebcopy
поможет вам клонировать отдельные веб-страницы или даже целые сайты. Функция
save_webpage
скачивает страницу по указанной ссылке, в аргументы также можно передать путь, куда сохранить результат. А вот
save_website
дает возможность скачать целый вебсайт рекурсивно. Например, если сайт представляет из себя блог, то скрипт скачет все статьи, которые есть на сайте. Но здесь надо быть аккуратнее, подобная рекурсивная загрузка отправит много запросов к серверу и может сильно нагрузить его, если на сайте много страниц.
#pywebcopy
Работаем с атрибутами объектов
Помимо привычного обращения к атрибутам объектов через точку, в Python есть 4 специальных функции:
По названиям можно понять, что первые три отвечают за получение, установку и удаление атрибута. А последний проверяет, существует ли атрибут с указанным названием у объекта или нет.
Во всех функциях первыми двумя аргументами идут объект и название атрибута в виде строки. В
На практике использование подобного — довольно редкий случай, но иногда может сильно выручить, так что берите на вооружение.
#классы #атрибуты
Помимо привычного обращения к атрибутам объектов через точку, в Python есть 4 специальных функции:
getattr
, setattr
, delattr
и hasattr
.По названиям можно понять, что первые три отвечают за получение, установку и удаление атрибута. А последний проверяет, существует ли атрибут с указанным названием у объекта или нет.
Во всех функциях первыми двумя аргументами идут объект и название атрибута в виде строки. В
setattr
также нужно передать новое значение для атрибута.На практике использование подобного — довольно редкий случай, но иногда может сильно выручить, так что берите на вооружение.
#классы #атрибуты
Выделение базовой части слов
При обработки естественного языка в машинном обучении мы сталкиваемся с множеством форм слова, например, демократия и демократизация. Для машин очень важно понимать, что эти разные слова имеют одинаковую базовую форму.
Таким образом, было бы полезно при анализе текста извлекать базовые формы слов. Можно сказать, что для процесса выделения базовой части слова необходимо обрезать концы слов.
В модуле Python NLTK (Natural Language Toolkit Package) есть различные пакет, связанные с данным процессом выделения базовой части и использующие разные алгоритмы.
Один за пакетов,
#snowball
При обработки естественного языка в машинном обучении мы сталкиваемся с множеством форм слова, например, демократия и демократизация. Для машин очень важно понимать, что эти разные слова имеют одинаковую базовую форму.
Таким образом, было бы полезно при анализе текста извлекать базовые формы слов. Можно сказать, что для процесса выделения базовой части слова необходимо обрезать концы слов.
В модуле Python NLTK (Natural Language Toolkit Package) есть различные пакет, связанные с данным процессом выделения базовой части и использующие разные алгоритмы.
Один за пакетов,
snowball
, использует алгоритм соответственно Snowball
, разработанный Мартином Портером. Алгоритм поддерживает большинство популярных языков. Подробнее об алгоритме можно почитать тут.#snowball
Делаем планировщик задач
К моему удивлению, далеко не все знают про пакет
Основной его плюс в том, что он максимально интуитивный и имеет гибкий функционал. А еще
Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах.
#schedule
К моему удивлению, далеко не все знают про пакет
schedule
, который позволяет планировать задачи и повторять их через промежуток времени. Основной его плюс в том, что он максимально интуитивный и имеет гибкий функционал. А еще
schedule
не требует внешних зависимостей и сам в целом легковесный. Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах.
#schedule
🔥 Полезные библиотеки Python
AniPortrait — Python инструмент для создания высококачественной анимации на основе звука и портретного изображения.
📂 GitHub/Инструкция
#python #soft #github
AniPortrait — Python инструмент для создания высококачественной анимации на основе звука и портретного изображения.
📂 GitHub/Инструкция
#python #soft #github
🔥 Полезные библиотеки Python
PrivatePing — защищённое приложение для переписки, разработанное на базе Python Django.
Пользователям доступна функция регистрации, безопасного доступа к своему аккаунту и обмена зашифрованными сообщениями.
PrivatePing гарантирует сквозное шифрование, анонимность при входе в систему и надёжную аутентификацию.
📂 GitHub/Инструкция
Пробуем тут
#python #soft #github
PrivatePing — защищённое приложение для переписки, разработанное на базе Python Django.
Пользователям доступна функция регистрации, безопасного доступа к своему аккаунту и обмена зашифрованными сообщениями.
PrivatePing гарантирует сквозное шифрование, анонимность при входе в систему и надёжную аутентификацию.
📂 GitHub/Инструкция
Пробуем тут
#python #soft #github
Query JSON
JMESpath – это язык запросов для JSON, который позволяет получать необходимые данные из документа или словаря JSON. Библиотека доступна как для Python, так и для других ЯП, что расширяет ее возможности.
#библиотеки
JMESpath – это язык запросов для JSON, который позволяет получать необходимые данные из документа или словаря JSON. Библиотека доступна как для Python, так и для других ЯП, что расширяет ее возможности.
#библиотеки
🔥 Полезные библиотеки Python
LeakSearch — простой в использовании, удобный инструмент для поиска утекших в сеть паролей по базам(ProxyNova, LocalFile).
Поддерживаем поиск по ключевым словам, домены, пользователи и т.д., экспорт файлов в JSON или TXT.
Установка:
Использование:
⚙️ GitHub/Инструкция
#python #soft #github
LeakSearch — простой в использовании, удобный инструмент для поиска утекших в сеть паролей по базам(ProxyNova, LocalFile).
Поддерживаем поиск по ключевым словам, домены, пользователи и т.д., экспорт файлов в JSON или TXT.
Установка:
$ git clone https://github.com/JoelGMSec/LeakSearch
$ cd LeakSearch
$ pip install -r requirements.txt
Использование:
$ python LeakSearch.py
⚙️ GitHub/Инструкция
#python #soft #github
Функция shorten()
Функция shorten() модуля textwrap усекает заданный текст, чтобы он поместился в заданную ширину width.
Сначала все пробелы заменяются одиночными пробелами. Если результат соответствует ширине, он возвращается. В противном случае с конца отбрасывается слова, чтобы оставшийся текст плюс заполнитель placeholder (по умолчанию [...]) поместились в указанную ширину width.
Функция shorten() модуля textwrap усекает заданный текст, чтобы он поместился в заданную ширину width.
Сначала все пробелы заменяются одиночными пробелами. Если результат соответствует ширине, он возвращается. В противном случае с конца отбрасывается слова, чтобы оставшийся текст плюс заполнитель placeholder (по умолчанию [...]) поместились в указанную ширину width.