Преобразование аудиофайлов с помощью Python
В
Для начала работы с файлом, используем метод
Когда файл загружен, для его конвертации и сохранения в желаемом формате применяем метод
Блог разраба со стажем
В
Python существует множество способов для выполнения конвертации аудиофайлов из одного формата в другой. Одним из наиболее удобных инструментов для этого является модуль pydub. Этот модуль служит оболочкой для ffmpeg и предоставляет возможности по загрузке, редактированию и сохранению аудиофайлов в различных форматах, поддерживаемых ffmpeg.Для начала работы с файлом, используем метод
from_ с указанием необходимого формата из класса AudioSegment, или же обратимся к более универсальному методу from_file, предоставляя путь к файлу и его формат.Когда файл загружен, для его конвертации и сохранения в желаемом формате применяем метод
export объекта класса AudioSegment, созданного на предыдущем шаге.Блог разраба со стажем
❤37🤯17😁3
Слияние аудио и видео потоков
Проблема с получением видео в высоком качестве со звуком с
Решением является отдельное получение аудио и видео потоков и их последующее объединение с использованием программы
Необходимо выбрать соответствующие аудио и видео потоки, затем использовать полученные
Блог разраба со стажем
Проблема с получением видео в высоком качестве со звуком с
YouTube связана с использованием технологии DASH (Dynamic Adaptive Streaming over HTTP), которая не предусматривает наличие звуковой дорожки в потоке.Решением является отдельное получение аудио и видео потоков и их последующее объединение с использованием программы
ffmpeg.Необходимо выбрать соответствующие аудио и видео потоки, затем использовать полученные
URL в команде ffmpeg для запуска процесса загрузки и слияния потоков.Блог разраба со стажем
❤50🤯31😁8🔥4
Многопоточность
В модуле
Параметр
Когда
Блог разраба со стажем
В модуле
threading новый поток выполнения может начинаться с нового threading.Thread и присвоения ему функции для выполнения.Параметр
target ссылается на функцию (или вызываемый объект), который будет работать. Нить не начнет выполнение до start, также не будет вызываться Thread объекта.Когда
my_thread завершается, вызов start выкинет исключение RuntimeError. Если вы хотите запустить Thread в фоновом режиме, то передавайте daemon=True или установите my_thread.daemon в True перед вызовом start().Блог разраба со стажем
❤31🤯12🔥2😁1
Работа с YAML-Файлами в Python с Помощью Библиотеки PyYAML
Результат (файл
В этом примере мы используем
Библиотека
Блог разраба со стажем
PyYAML позволяет эффективно работать с файлами в формате YAML (YAML Ain't Markup Language), который широко используется для конфигураций, настроек и обмена данными в структурированной форме.import yaml
data_to_write = {'name': 'John Doe', 'age': 30, 'city': 'Example City'}
with open('example.yaml', 'w') as file:
yaml.dump(data_to_write, file, default_flow_style=False)
with open('example.yaml', 'r') as file:
loaded_data = yaml.safe_load(file)
print(f"Загруженные данные: {loaded_data}")
Результат (файл
example.yaml):age: 30
city: Example City
name: John Doe
В этом примере мы используем
PyYAML для записи словаря data_to_write в файл example.yaml и затем загружаем данные из этого файла обратно в переменную loaded_data.Библиотека
PyYAML предоставляет удобные средства для работы с данными в формате YAML в Python. Будь то сохранение конфигураций, обмен структурированными данными или другие сценарии, где YAML имеет преимущество, PyYAML обеспечивает легкость в использовании и читаемый код🐍Блог разраба со стажем
❤26🔥14👍6
Создание и использование виртуальной среды
Создание новой виртуальной среды требуется только один раз для каждого проекта, для которого вы хотите изолировать зависимости:
Чтобы активировать виртуальную среду, нужно запустить
Блог разраба со стажем
virtualenv — инструмент для создания изолированных сред Python. Программа создает папку, которая содержит все необходимые исполняемые файлы для использования пакетов, необходимых для проекта.Создание новой виртуальной среды требуется только один раз для каждого проекта, для которого вы хотите изолировать зависимости:
python3 -m venv venv
Это создаст папку venv, содержащую оснастку сценариев и копию python самого двоичного файла. Название папки не имеет значения. Чтобы активировать виртуальную среду, нужно запустить
activate файл: source venv/bin/activate и далее мы можем свободно устанавливать любые зависимости, которые никак не скажутся на работе в будущих проектах.Блог разраба со стажем
❤50🤯23😁5🔥3
Использование аннотаций типов в Python
Python, язык с динамической типизацией, позволяет работать с переменными различных типов. Иногда это может привести к ошибкам из-за неправильного использования типов .
Начиная с версии 3.6, Python поддерживает аннотации типов для переменных, атрибутов классов, аргументов функций и их возвращаемых значений, что помогает улучшить читаемость кода и предотвратить ошибки, связанные с типами данных.
Блог разраба со стажем
Python, язык с динамической типизацией, позволяет работать с переменными различных типов. Иногда это может привести к ошибкам из-за неправильного использования типов .
Начиная с версии 3.6, Python поддерживает аннотации типов для переменных, атрибутов классов, аргументов функций и их возвращаемых значений, что помогает улучшить читаемость кода и предотвратить ошибки, связанные с типами данных.
Блог разраба со стажем
❤26🤯13😁11🔥5
Применяем pathlib взамен os
В Python 3 стандартная библиотека включает модуль
Одно из наиболее впечатляющих преимуществ использования
В общем, этот модуль предлагает замену функциям для работы с файловыми путями из модуля
Блог разраба со стажем
В Python 3 стандартная библиотека включает модуль
pathlib, предоставляющий функцию Path, которая обеспечивает все необходимое для эффективной работы с путями к файлам.Одно из наиболее впечатляющих преимуществ использования
pathlib - это упрощение работы с путями за счет использования Path вместо os.path.join, представляя более простой и изящный метод, как показано на изображении.В общем, этот модуль предлагает замену функциям для работы с файловыми путями из модуля
os, таким как os.mkdir или os.path, на более удобные альтернативы.Блог разраба со стажем
❤54🤯28🔥5😁5👍2
Паттерн проектирования Singleton
Одиночка или же синглтон – это паттерн проектирования, описывающий объект, у которого имеется один единственный экземпляр.
Метод
В примере мы проверяем, есть ли значение у атрибута
То есть при вызове конструктора класса
Блог разраба со стажем
Одиночка или же синглтон – это паттерн проектирования, описывающий объект, у которого имеется один единственный экземпляр.
Метод
__new__ вызывается для создания экземпляра класса, перед вызовом init. На вход первым аргументом метод принимает сам класс, а возвращать должен уже экземпляр (даже можно экземпляр и другого класса).В примере мы проверяем, есть ли значение у атрибута
instance. Если нет, то присваиваем атрибуту экземпляр этого же класса. А если уже экземпляр создан, то просто его возвращаем.То есть при вызове конструктора класса
Singleton, будет возвращаться один и тот же объект из памяти.Блог разраба со стажем
❤22🤯10🔥7😁6👍3
Создание скриншотов с использованием модуля pyscreenshot
Модуль
Для захвата изображения используется метод
Этот модуль оказывается особенно полезным, например, при логировании скриптов, использующих
#pyscreenshot
Блог разраба со стажем
Модуль
pyscreenshot, обеспечивая кросс-платформенную функциональность, позволяет легко создавать скриншоты как всего экрана, так и его отдельных частей. Для работы этого модуля необходимо установить библиотеку Pillow.Для захвата изображения используется метод
grab, для его отображения – show, а для сохранения – save. В метод grab можно также передать аргумент bbox, чтобы ограничить захват только определенной областью экрана.Этот модуль оказывается особенно полезным, например, при логировании скриптов, использующих
Selenium. Selenium может открывать браузер и выполнять различные операции в нем, и использование pyscreenshot позволяет создавать скриншоты для последующего анализа и отладки.#pyscreenshot
Блог разраба со стажем
❤62🤯25😁8🔥3👏2
Генераторы коллекций
В Python генераторы коллекций (или генераторы) представляют собой удобный способ создания итерируемых последовательностей данных без необходимости сохранять все элементы в памяти. Они могут использоваться для генерации значений на лету, что делает их полезными для работы с большими или бесконечными последовательностями данных.
Генераторы коллекций можно создать с использованием специального синтаксиса, который похож на генераторы списков, но вместо создания списка они создают генераторный объект. В примере на картинке мы создали генератор выражений. Генераторы выражений особенно полезны, когда вы работаете с большими объемами данных, так как они не сохраняют все элементы в памяти, а генерируют их по мере необходимости.
Блог разраба со стажем
В Python генераторы коллекций (или генераторы) представляют собой удобный способ создания итерируемых последовательностей данных без необходимости сохранять все элементы в памяти. Они могут использоваться для генерации значений на лету, что делает их полезными для работы с большими или бесконечными последовательностями данных.
Генераторы коллекций можно создать с использованием специального синтаксиса, который похож на генераторы списков, но вместо создания списка они создают генераторный объект. В примере на картинке мы создали генератор выражений. Генераторы выражений особенно полезны, когда вы работаете с большими объемами данных, так как они не сохраняют все элементы в памяти, а генерируют их по мере необходимости.
Блог разраба со стажем
❤54🤯22😁11🔥4👍2
dict.get()
Синтаксис метода
Блог разраба со стажем
dict.get() — это метод словаря, который используется для получения значения по заданному ключу. Однако, в отличие от обращения к элементу словаря с использованием квадратных скобок (dict[key]), метод get() предоставляет дополнительную возможность задать значение по умолчанию, которое будет возвращено, если ключ не найден в словаре.Синтаксис метода
get() выглядит так:value = dict.get(key, default)key: Ключ, по которому производится поиск в словаре.default (необязательный): Значение, которое будет возвращено, если ключ не найден в словаре. Если default не указан, и ключ не найден, метод вернет None.Блог разраба со стажем
❤55🤯19😁15👍7🔥3👏1
Слоты в классах
По умолчанию в Python в классах используется словарь
В случаях, когда мы сразу точно знаем все атрибуты, используемые в классе, мы можем воспользоваться атрибутом
#class #slots
Блог разраба со стажем
По умолчанию в Python в классах используется словарь
__dict__ для хранения атрибутов, который создается по умолчанию при создании экземпляра класса. Данная особенность позволяет динамически в рантайме добавлять атрибуты, но от сюда появляются соответствующие проблемы с производительностью. В случаях, когда мы сразу точно знаем все атрибуты, используемые в классе, мы можем воспользоваться атрибутом
__slots__, который позволяет задать ограниченный список аргументов для класса. В этом случае словарь __dict__ не будет создаваться, что позволит сэкономить память и поднять производительность.#class #slots
Блог разраба со стажем
❤38🤯18🔥14😁6
Редирект вывода программы
В
Контекстный менеджер принимает аргумент, в котором мы можем указать, куда должен переправляться весь вывод в последующем блоке.
Таким образом, данные из
Убедится в этом можем, открыв файл заново и прочитав оттуда данные.
#contextlib
Блог разраба со стажем
В
contextlib есть еще один прикольный контекстный менеджер — redirect_stdout, позволяющий перенаправить стандартный вывод программы.Контекстный менеджер принимает аргумент, в котором мы можем указать, куда должен переправляться весь вывод в последующем блоке.
Таким образом, данные из
print() в контекстом менеджере будут переправлены в открытый ранее файл, так как мы его передали в аргумент redirect_stdout.Убедится в этом можем, открыв файл заново и прочитав оттуда данные.
#contextlib
Блог разраба со стажем
❤40🤯11😁6🔥3
Делаем планировщик задач
К моему удивлению, далеко не все знают про пакет
Основной его плюс в том, что он максимально интуитивный и имеет гибкий функционал. А еще
Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах.
#schedule
Блог разраба со стажем
К моему удивлению, далеко не все знают про пакет
schedule, который позволяет планировать задачи и повторять их через промежуток времени. Основной его плюс в том, что он максимально интуитивный и имеет гибкий функционал. А еще
schedule не требует внешних зависимостей и сам в целом легковесный. Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах.
#schedule
Блог разраба со стажем
❤40🤯16😁8🔥1
Загрузка файлов асинхронно
Если у нас есть список
Однако, для задач, включающих загрузку большого количества маленьких файлов, параллелизация может заметно ускорить процесс.
Для параллелизации мы можем использовать
С помощью метода
Важно понимать, что так как загрузка файлов является IO-операцией, данный метод не ускоряет выполнение кода в прямом смысле, а скорее позволяет начать загрузку следующего файла, не ожидая завершения предыдущего.
#threading
Блог разраба со стажем
Если у нас есть список
URL картинок для загрузки, использование простого цикла for позволит нам загрузить их последовательно, по одной за раз.Однако, для задач, включающих загрузку большого количества маленьких файлов, параллелизация может заметно ускорить процесс.
Для параллелизации мы можем использовать
ThreadPoolExecutor из модуля concurrent.futures. Этот инструмент позволяет выполнить функцию загрузки в нескольких параллельных потоках, где в конструкторе необходимо указать максимальное количество потоков для одновременного выполнения.С помощью метода
.map(download, urls) можно развернуть функцию загрузки на каждый URL из списка, обеспечивая их параллельную обработку.Важно понимать, что так как загрузка файлов является IO-операцией, данный метод не ускоряет выполнение кода в прямом смысле, а скорее позволяет начать загрузку следующего файла, не ожидая завершения предыдущего.
#threading
Блог разраба со стажем
❤52🤯27😁7🔥6
Сравнение двух аудиосообщений с использованием библиотеки Librosa
Важные замечания:
— Для точного сравнения аудиозаписей они должны иметь одинаковую продолжительность и аналогичные условия записи (громкость, уровень шума и т.д.).
— Возможно потребуется дополнительная предварительная обработка, например, нормализация громкости.
#librosa
Блог разраба со стажем
Librosa — библиотека, которая обеспечивает анализ и обработку звука. Сравнение производится путем вычисления характеристик MFCC (Mel Frequency Cepstral Coefficients), описывающих звуковую сигнатуру каждого аудио.Важные замечания:
— Для точного сравнения аудиозаписей они должны иметь одинаковую продолжительность и аналогичные условия записи (громкость, уровень шума и т.д.).
— Возможно потребуется дополнительная предварительная обработка, например, нормализация громкости.
#librosa
Блог разраба со стажем
❤33🤯18😁4🔥2
Превращаем PDF в текст
Думаю, все периодические работают с PDF-документами. И зачастую это ручная и скучная работа. Но Python может автоматизировать даже такую рутинную задачу.
Модуль
Кстати, здесь ещё интересно то, что исходный код модуля написан на C++. Поэтому есть небольшая вероятность, что придётся повоевать с зависимостями.
#pdftotext
Блог разраба со стажем
Думаю, все периодические работают с PDF-документами. И зачастую это ручная и скучная работа. Но Python может автоматизировать даже такую рутинную задачу.
Модуль
pdftotext создан именно для работы с документами в PDF формате. Устанавливается он через пакетный менеджер pip, а использовать его проще простого. Все основные операции представлены на картинке выше. Кстати, здесь ещё интересно то, что исходный код модуля написан на C++. Поэтому есть небольшая вероятность, что придётся повоевать с зависимостями.
#pdftotext
Блог разраба со стажем
❤44🤯22🔥4😁4
Генерируем анекдоты
Не самый полезный, но весьма интересный пакет
Метод
Также можно указать категорию в аргументах — особенно классно заходят штуки про Чак Норриса с пометкой
Блог разраба со стажем
Не самый полезный, но весьма интересный пакет
pyjokes выдает различные шутки и анекдоты на 6 языках. Но русский, к сожалению, в это число не входит.Метод
get_joke() возвращает строку, которая хранит в себе случайную шутку. В аргументы можно указать язык, по умолчанию стоит английский.Также можно указать категорию в аргументах — особенно классно заходят штуки про Чак Норриса с пометкой
'chuck'.Блог разраба со стажем
❤37🔥17👍11😁8👏5
База данных на минималках
Встроенный модуль
Доступ к данным осуществляется с помощью ключей, как и в случае со словарями. А метод
В документации заявляют, что такая база данных является "надежной". Но учитывая, что
Блог разраба со стажем
Встроенный модуль
shelve позволяет сохранять и читать произвольные данные. Таким образом, можно сохранять любые Python объекты для дальнейшего использования. Доступ к данным осуществляется с помощью ключей, как и в случае со словарями. А метод
shelve.open поддерживает протокол контекстного менеджера, то есть можно не вызывать метод close. В документации заявляют, что такая база данных является "надежной". Но учитывая, что
shelve написан на pickle, его стоит использовать только в совсем маленьких проектах.Блог разраба со стажем
❤58🤯29😁9🔥4👍2
Обрезаем фотографии с помощью Python
Pillow также может использоваться для обрезки изображения, при этом вы можете получить производный прямоугольник выбранного изображения, указав координаты, по которым преобразовать изображение.
Координаты обрезанной поверхности представлены диагональными координатами. При этом первые две точки находятся (x, y) от верхней левой диагональной точки, а следующие две точки (x2, y2) также являются диагональной точкой снизу справа.
Фотографии до и после изменения изображения представлены в посте выше.
Блог разраба со стажем
Pillow также может использоваться для обрезки изображения, при этом вы можете получить производный прямоугольник выбранного изображения, указав координаты, по которым преобразовать изображение.
Координаты обрезанной поверхности представлены диагональными координатами. При этом первые две точки находятся (x, y) от верхней левой диагональной точки, а следующие две точки (x2, y2) также являются диагональной точкой снизу справа.
Фотографии до и после изменения изображения представлены в посте выше.
Блог разраба со стажем
❤71🤯35👏26😁23🔥5👀1
Сравниваем Django и Flask
Оба фреймворка крайне мощные, но выбрать надо что-то одно. Из общеизвестных фактов: Django – самый востребованный в плане работы, Flask – наиболее производительный.
Django является более монолитным и предоставляет сразу множество инструментов из коробки, а Flask в свою очередь гибкий и минималистичный, позволяет кастомизировать архитектуру приложения.
Если в приоритете трудоустройство, то следует изучать Django. Но если вы хотите быстро начать создавать пет-проекты или изучать веб в целом, то рекомендуем рассматривать Flask.
Блог разраба со стажем
Оба фреймворка крайне мощные, но выбрать надо что-то одно. Из общеизвестных фактов: Django – самый востребованный в плане работы, Flask – наиболее производительный.
Django является более монолитным и предоставляет сразу множество инструментов из коробки, а Flask в свою очередь гибкий и минималистичный, позволяет кастомизировать архитектуру приложения.
Если в приоритете трудоустройство, то следует изучать Django. Но если вы хотите быстро начать создавать пет-проекты или изучать веб в целом, то рекомендуем рассматривать Flask.
Блог разраба со стажем
❤27👀1