Углубляемся в Итератор
Итератор нужен для доступа к объектам без раскрытия внутреннего предоставления.
Существует два вида итераторов: внешний,внутренний.
Внешний итератор — когда процессом обхода управляет клиент, с помощью магического метода
Внутренний итератор — принимает callback функции и уведомляет клиента о получение следующего элемента.
Сам итератор это объект, который возвращает свои элементы по одному разу. В Python это любой объект у которого есть магический метод
Так-же у каждого итератора должна быть метод
Интерфейса итератора состоит из
#Python #Итератор
Итератор нужен для доступа к объектам без раскрытия внутреннего предоставления.
Существует два вида итераторов: внешний,внутренний.
Внешний итератор — когда процессом обхода управляет клиент, с помощью магического метода
__next__
.Внутренний итератор — принимает callback функции и уведомляет клиента о получение следующего элемента.
Сам итератор это объект, который возвращает свои элементы по одному разу. В Python это любой объект у которого есть магический метод
__next__
. Метод возвращает следующий элемент, если он существует, в другом случаи вернет StopIteration.Так-же у каждого итератора должна быть метод
__iter__
, он возвращает сам итератор. Интерфейса итератора состоит из
first
,next
,current
.first
— возвращает итератор к началу агрегата,что-то вроде reset.next
— переходит на следующий элемент агрегата, в случаи если нет следующего элемента, то будет StopIteration.current
— возвращает текущий элемент.#Python #Итератор
OpenCV и веб-камера
Для работы с компьютерным зрением и картинками/видео существует библиотека OpenCV.
Устанавливается она через PIP:
Команда
Строчка
Команда
Чтобы прервать работу скрипта используется проверка на нажатие определенной клавиши на клавиатуре:
#opencv
Для работы с компьютерным зрением и картинками/видео существует библиотека OpenCV.
Устанавливается она через PIP:
pip install opencv-python
.
Для простой демонстрации попробуем получить картинку с веб-камеры и вывести видео в графическое окно.Команда
cap = cv2.VideoCapture(0)
инициализирует веб-камеру (цифра указывает её индекс).Строчка
ret, frame = cap.read()
вытягивает из веб-камеры картинку в переменную frame
и статус получения картинки в ret
. Если ret
==
True
, значит все прошло успешно.Команда
cv2.imshow('webcam', frame)
создаст графическое окно с картинкой и покажет его.Чтобы прервать работу скрипта используется проверка на нажатие определенной клавиши на клавиатуре:
if cv2.waitKey(1) & 0xFF == ord('q'):
Метод cap.release()
освобождает веб-камеру из скрипта примера и позволяет ее использовать в других программах, а cv2.destroyAllWindows()
уничтожит графические окна, созданные библиотекой openCV.#opencv
Конвертируем файлы в аудио-формате
В Python мы можем решить задачу конвертации из одного аудио-формата в другой как всегда множеством способов. Наиболее приятным решением, как по мне, является использование модуля
pydub позволяет загружать, редактировать и сохранять аудио-файлы в любом формате, поддерживаемом
Для загрузки файла нам нужно выбрать функцию from_ c соответствующим форматом в названии из класса
Для экспорта файла с нужным форматом, в который мы хотели его сконвертировать, используем функцию
#audio #pydub
В Python мы можем решить задачу конвертации из одного аудио-формата в другой как всегда множеством способов. Наиболее приятным решением, как по мне, является использование модуля
pydub
, который представляет собой интерфейс-надстройку над ffmpeg
.pydub позволяет загружать, редактировать и сохранять аудио-файлы в любом формате, поддерживаемом
ffmpeg
. Для загрузки файла нам нужно выбрать функцию from_ c соответствующим форматом в названии из класса
AudioSegment
. Также можно воспользоваться наиболее общей функцией from_file
, передав путь к файлу и его формат. Для экспорта файла с нужным форматом, в который мы хотели его сконвертировать, используем функцию
export
у полученного после загрузки файла объекта класса AudioSegment
.#audio #pydub
Визуализация данных на карте с Folium
Folium позволяет как и привязать данные к карте для визуализации фоновых картограмм, так и передавать векторные, растовые, HTML визуализации в качестве маркеров на карте.
Библиотека поддерживает настраиваемые наборы фрагментов MapBox или Cloudmade.
Есть разные виды маркеров начиная с простого маркера местоположения в стиле листовки с всплывающим окном и всплывающей подсказкой HTML.
Вы так-же можете налаживать изображения, видео, GeoJSON и TopoJSON.
Результат работы — https://i.imgur.com/QhNDb5I.png
#Folium
Folium позволяет как и привязать данные к карте для визуализации фоновых картограмм, так и передавать векторные, растовые, HTML визуализации в качестве маркеров на карте.
Библиотека поддерживает настраиваемые наборы фрагментов MapBox или Cloudmade.
Есть разные виды маркеров начиная с простого маркера местоположения в стиле листовки с всплывающим окном и всплывающей подсказкой HTML.
Вы так-же можете налаживать изображения, видео, GeoJSON и TopoJSON.
Результат работы — https://i.imgur.com/QhNDb5I.png
#Folium
Работа с датой и временем
Dateutil – предоставляет расширения для методов, уже имеющихся в datetime, имеет возможности для обработки сырых данных.
Dateutil разбит на несколько подклассов:
Так-же следуют упомянуть
#Dateutil
Dateutil – предоставляет расширения для методов, уже имеющихся в datetime, имеет возможности для обработки сырых данных.
Dateutil разбит на несколько подклассов:
easter
— используется для вычисления даты и времени с учетом разных календарей, а именно: западный,православный,юлианский.parser
— включает в себя продвинутый парсер даты и времени, с помощью которого мы можем парсить разные форматы.relativedata
— предназначен для замены компонентов даты.Так-же следуют упомянуть
utils
, он содержит основные функции для работы с датой и временем.#Dateutil
Получение аудиопотока с микрофона
Библиотека
В приведенном примере мы создаем объект класса
Данный объект потока позволяет считывать с устройства с помощью метода
В примере же мы просто считываем 10 секунд, после чего записываем их в аудио-файл
#pyaudio #audio
Библиотека
PyAudio
предоставляет возможности для записи аудиопотока с различных устройств. PyAudio
работает посредством кросс-платформенной библиотеки PortAudio
(поэтому необходимо заранее установить пакет разработки portaudio19-dev
).В приведенном примере мы создаем объект класса
PyAudio
и открываем поток с рядом констант для настройки аудиопотока, поступающего с микрофона (для выбора другого устройства нужно передать его номер в качестве аргумента input_device_index
). Данный объект потока позволяет считывать с устройства с помощью метода
stream.read()
. Полученную информацию мы можем использовать для дальнейшего анализа и модификации. В примере же мы просто считываем 10 секунд, после чего записываем их в аудио-файл
wav
. #pyaudio #audio
Генерация шумов Перлина
Шум перлина — это математический алгоритм по генерированию процедурной текстуры (градиентного шума) псевдо-случайным методом.
Для нас он может пригодится в разных ситуациях: от симуляции временных рядов разных показателей до генерации процедурного мира как в Minecraft.
Для Python уже существует библиотека-реализация этого алгоритма, называется она perlin-noise.
#random #perlin
Шум перлина — это математический алгоритм по генерированию процедурной текстуры (градиентного шума) псевдо-случайным методом.
Для нас он может пригодится в разных ситуациях: от симуляции временных рядов разных показателей до генерации процедурного мира как в Minecraft.
Для Python уже существует библиотека-реализация этого алгоритма, называется она perlin-noise.
pip install perlin-noise
Сначала мы создаем обьект генератора шумов, и задаем ему количество октав и seed для встроенного рандомизатора: noise = PerlinNoise(octaves=10, seed=1)
Обьявляем размер желаемой 2d матрицы: xpix, ypix = 100, 100
И используя списочное включение, генерируем 2d матрицу, где интенсивность значения от координат задает наш обьект генератора noise
: pic = [[noise([i/xpix, j/ypix]) for j in range(xpix)] for i in range(ypix)]
Пример картинки можно посмотреть в комментариях к этому посту. #random #perlin
Форматирование чисел в f-строках
Начиная с версии Python 3.6, стали доступны f-строки. Это удобный способ форматирования текста. Но не все знают, что он умеет вставлять float числа с настраиваемым количеством знаков после запятой.
Допустим у нас есть float число
#fstring
Начиная с версии Python 3.6, стали доступны f-строки. Это удобный способ форматирования текста. Но не все знают, что он умеет вставлять float числа с настраиваемым количеством знаков после запятой.
Допустим у нас есть float число
pi = 3.14159265359
. Если мы его просто скорвертируем в строку, то она примет следующий вид: >>> str(3.14159265359)
'3.14159265359'
Но что если важно выписать только до сотых долей? Делается это черех f-строку: >>> f'Число Пи это {pi:.2f}'
'Число Пи это 3.14'
После обьявления имени переменной мы вставляем следующую комбинацию: .2f
, где цифра как раз и указывает, сколько знаков после запятой нужно преобразовать в строку. Более подробно это описано в PEP 498.#fstring
Определяем координаты места по его адресу
Для работы с адресами существует удобная библиотека geopy.
Она использует публичные API (например OpenStreetMap Nominatim, Google Geocoding API и другие). Благодаря этому мы можем искать разные обьекты и их координаты по адресу.
При поиске мы можем указать как номер и улицу дома, название города, страны, так и полный адрес определенного места.
Официальную документацию можно просмотреть тут. Ознакомиться с интерактивным примером можно тут.
#geopy
Для работы с адресами существует удобная библиотека geopy.
Она использует публичные API (например OpenStreetMap Nominatim, Google Geocoding API и другие). Благодаря этому мы можем искать разные обьекты и их координаты по адресу.
При поиске мы можем указать как номер и улицу дома, название города, страны, так и полный адрес определенного места.
Официальную документацию можно просмотреть тут. Ознакомиться с интерактивным примером можно тут.
#geopy
Библиотека для работы с итераторами
Встроенный пакет
В самой библиотеке их намного больше, поэтому советую вам ознакомится с документацией. Ознакомиться с интерактивным примером можно тут.
#itertools
Встроенный пакет
itertools
содержит сборник полезных итераторов, поговорим о нескольких из них: combinations
— возвращает кортеж в отсортированном порядке без повторяемых элементов. chain
— возвращает элементы из объекта, пока он не будет исчерпан, затем переходит к следующему, используется для обработки множества последовательностей как единой. permutations
— возвращает все возможные перестановки. filterfalse
— возвращает все элементы для которых функция вернула false
. startmap
— применяет функцию к каждому элементу последовательности распаковывая его. В самой библиотеке их намного больше, поэтому советую вам ознакомится с документацией. Ознакомиться с интерактивным примером можно тут.
#itertools
Объёмы данных растут, а компании ищут новый тип сотрудников - квалифицированных инженеров данных
Сегодня роль инженера данных востребована везде, где работа с данными влияет на успех выполнения бизнес-задач. А уже в ближайшие годы мы увидим новые «гибридные» профессии, в работе которых используются технические и бизнес-компетенции.
Обучиться новой профессии можно в Школе Инженерии Данных от билайн.
За три месяца в Школе ты сможешь:
• научиться работать с основными инструментами, используемыми в чаптере инженеров данных (sql, scala, spark, airflow, ide, linux/bash, Hadoop, ci/cd);
• освоить типовые способы интеграции, обработки, хранения данных;
• узнать во время стажировки, как устроены потоки данных внутри компании;
• закрепить полученные знания, работая сначала над учебным, а потом над реальным продуктом;
• открыть для себя новые возможности, став участником одной из продуктовых команд.
Узнать больше о Школе и зарегистрироваться ты можешь уже сегодня, пройдя по ссылке. Регистрация и вступительные испытания до 6 февраля включительно. Старт Школы — 14 февраля.
Подписывайся на телеграм-канал Школы и следи за новостями программы!
Сегодня роль инженера данных востребована везде, где работа с данными влияет на успех выполнения бизнес-задач. А уже в ближайшие годы мы увидим новые «гибридные» профессии, в работе которых используются технические и бизнес-компетенции.
Обучиться новой профессии можно в Школе Инженерии Данных от билайн.
За три месяца в Школе ты сможешь:
• научиться работать с основными инструментами, используемыми в чаптере инженеров данных (sql, scala, spark, airflow, ide, linux/bash, Hadoop, ci/cd);
• освоить типовые способы интеграции, обработки, хранения данных;
• узнать во время стажировки, как устроены потоки данных внутри компании;
• закрепить полученные знания, работая сначала над учебным, а потом над реальным продуктом;
• открыть для себя новые возможности, став участником одной из продуктовых команд.
Узнать больше о Школе и зарегистрироваться ты можешь уже сегодня, пройдя по ссылке. Регистрация и вступительные испытания до 6 февраля включительно. Старт Школы — 14 февраля.
Подписывайся на телеграм-канал Школы и следи за новостями программы!
Извлечение таблиц из PDF
Camelot — это удобная библиотека, которая поможет вам извлечь любую таблицу из PDF файла.
Также есть возможность использоваться Excalibur, это веб интерфейс Camelot.
Почему вам стоит использовать Camelot:
— Каждая таблица является DataFrame;
— Возможность экспорта в множество разных форматов;
— Можно отбрасывать таблицы на основе таких метрик как точность и пробелы, без необходимости вручную просматривать таблицу.
#camelot
Camelot — это удобная библиотека, которая поможет вам извлечь любую таблицу из PDF файла.
Также есть возможность использоваться Excalibur, это веб интерфейс Camelot.
Почему вам стоит использовать Camelot:
— Каждая таблица является DataFrame;
— Возможность экспорта в множество разных форматов;
— Можно отбрасывать таблицы на основе таких метрик как точность и пробелы, без необходимости вручную просматривать таблицу.
#camelot
Синхронизация потоков
Блокировка — один из фундаментальных механизмов синхронизации в
Для каждого такого разделяемого ресурса нам нужно создать объект типа
В том случае когда нам потребуется освободить блокировку, то мы вызываем
Также все это можно заменить через оператор with. Оператор with автоматически захватывает блокировку перед входом в блок, и освобождает её после выхода.
Интерактивный пример — тут. Ссылка документация — тут.
#threading
Блокировка — один из фундаментальных механизмов синхронизации в
threading
. Зачастую блокировки используются для доступа к разделяемым ресурсам. Для каждого такого разделяемого ресурса нам нужно создать объект типа
Lock
и, когда нам потребуется доступ к ресурсу, следует вызвать acquire
, что бы взять контроль над блокировкой. В том случае когда нам потребуется освободить блокировку, то мы вызываем
release
. Стоит учесть то, что блокировку стоит освобождать даже в случае возникновения ошибок. Для этого можно использовать try-finally
. Также все это можно заменить через оператор with. Оператор with автоматически захватывает блокировку перед входом в блок, и освобождает её после выхода.
Интерактивный пример — тут. Ссылка документация — тут.
#threading
Асинхронно скачиваем файлы
Имея список ссылок на картинки, которые нужно скачать, мы можем это сделать используя простой цикл
Но в таких ситуациях как эта (скачивание огромного количества небольших файлов) распараллеливание задачи существенно ускорит процесс.
Для этого воспользуемся функцией ThreadPoolExecutor из стандартного пакета
Далее метод
Но будьте внимательны: так как скачивание файла — это IO-операция, такой метод не ускоряет вычисления кода. Он лишь позволяет запустить скачивание следующего файла, не дождавшись пока скачается предыдущий.
Ознакомиться с интерактивным примером можно тут.
#threading
Имея список ссылок на картинки, которые нужно скачать, мы можем это сделать используя простой цикл
for
, тем самым скачав их последовательно одна за одной. Но в таких ситуациях как эта (скачивание огромного количества небольших файлов) распараллеливание задачи существенно ускорит процесс.
Для этого воспользуемся функцией ThreadPoolExecutor из стандартного пакета
concurrent.futures
. Она позволяет запустить нашу функцию, в нескольких екземплярах в параллельных потоках. В конструкторе необходимо указать максимальное количество потоков, которые будут одновременно запущены. Далее метод
.map(download, urls)
создает екземпляры нашей функции для скачивания файла, и раскидывает в них элементы списка urls
. Но будьте внимательны: так как скачивание файла — это IO-операция, такой метод не ускоряет вычисления кода. Он лишь позволяет запустить скачивание следующего файла, не дождавшись пока скачается предыдущий.
Ознакомиться с интерактивным примером можно тут.
#threading
Пишете на Python или Go и хотите работать в Яндексе?
Или хотите перейти на них с другого языка программирования? Тогда приглашаем 26–27 февраля на Fast Track для бэкенд-разработчиков. На мероприятии, которое пройдет в онлайн-формате, вы сможете за пару дней получить оффер в команду, которая разрабатывает FinOps платформу Яндекса.
FinOps платформа — это внутренняя высоконагруженная финансово-операционная система, через которую проходят денежные транзакции всех сервисов Яндекса. Приходите работать с нами, задачи сложные, но действительно интересные.
Регистрируйтесь, решайте отборочный тест и до встречи 26 и 27 февраля!
Или хотите перейти на них с другого языка программирования? Тогда приглашаем 26–27 февраля на Fast Track для бэкенд-разработчиков. На мероприятии, которое пройдет в онлайн-формате, вы сможете за пару дней получить оффер в команду, которая разрабатывает FinOps платформу Яндекса.
FinOps платформа — это внутренняя высоконагруженная финансово-операционная система, через которую проходят денежные транзакции всех сервисов Яндекса. Приходите работать с нами, задачи сложные, но действительно интересные.
Регистрируйтесь, решайте отборочный тест и до встречи 26 и 27 февраля!
Воспроизводим аудиофайлы
Для этого воспользуемся кроссплатформенным пакетом playsound, который легко устанавливается через
Он содержит в себе лишь одну полезную функцию для воспроизведения аудиофайла:
В качестве параметра функции можно указать путь к
#audio
Для этого воспользуемся кроссплатформенным пакетом playsound, который легко устанавливается через
pip
. Он содержит в себе лишь одну полезную функцию для воспроизведения аудиофайла:
playsound('path/to/file.mp3')
В качестве параметра функции можно указать путь к
.mp3
или .wav
файлу, или вообще его url
. #audio
Цикл событий в Python
Цикл событий — это ядро для каждого асинхронного приложения. Он нужен для того, что бы запускать асинхронные задачи и функции обратного вызова.
Поговорим теперь о низкоуровневых методах:
Немного о методах для работы с циклами событий:
Также есть методы
Пример можете посмотреть на картинке выше. Много другого полезного вы можете прочитать в документации.
#async
Цикл событий — это ядро для каждого асинхронного приложения. Он нужен для того, что бы запускать асинхронные задачи и функции обратного вызова.
Поговорим теперь о низкоуровневых методах:
get_running_loop
— Возвращает текущий цикл событий в потоке. Если его нет, то будет RuntimeError. Может быть вызвана только с корутины или функции обратного вызова. get_event_loop
— Делает тоже самое что и функция выше, но если set_event_loop
не был вызван, то в добавок ещё закрепит новый цикл. new_event_loop
— Создает новый цикл событий. set_event_loop
— Устанавливает цикл событий для текущего потока. Немного о методах для работы с циклами событий:
run_forever
— Запускает цикл событий до тех пока stop не будет вызван. stop
— Останавливает цикл событий. Также есть методы
is_closed
и is_running
для проверки состояния. Пример можете посмотреть на картинке выше. Много другого полезного вы можете прочитать в документации.
#async
Захват экрана Windows
Существует несколько библиотек на Python для захвата экрана компьютера под управлением операционной системы Windows, но самой быстрой оказалась библиотека d3dshot.
Она использует системные библиотеки DXGI и Direct3D, чтобы обеспечить чрезвычайно быструю и надежную функциональность захвата экрана.
Её можно применить, например, в реализации игровых ботов.
Пример можно посмотреть тут.
#d3dshot
Существует несколько библиотек на Python для захвата экрана компьютера под управлением операционной системы Windows, но самой быстрой оказалась библиотека d3dshot.
Она использует системные библиотеки DXGI и Direct3D, чтобы обеспечить чрезвычайно быструю и надежную функциональность захвата экрана.
Её можно применить, например, в реализации игровых ботов.
Пример можно посмотреть тут.
#d3dshot
Генерация QR кодов
Сегодня покажем создание QR кодов. Для этого нам понадобится модуль
Все максимально просто, за нас по сути все делает уже написанный модуль.
Выше на картинке мы сделали простую функцию
За создание картинки отвечает метод
Получившийся QR код можете посмотреть тут.
#qrcode #pillow
Сегодня покажем создание QR кодов. Для этого нам понадобится модуль
qrcode
, который используется для создания изображений с QR кодом. Все максимально просто, за нас по сути все делает уже написанный модуль.
Выше на картинке мы сделали простую функцию
generate
, которая принимает какую-то информацию и название файла, в который нужно сохранить результат в виде QR кода. За создание картинки отвечает метод
qrcode.make
, который возвращает нам изображение в формате PIL.Image
, а после этого мы его сохраняем в нужном нам файле. Получившийся QR код можете посмотреть тут.
#qrcode #pillow