Сообщество - Программирование на python

Программирование на python

929 постов 11 940 подписчиков

Популярные теги в сообществе:

20

Шпаргалка: Неочевидные возможности f-строк, о которых вы могли не знать

Дисклеймер. В пикабу нет редактора кода, поэтому будут картинки, впрочем, в данном посте это не мешает восприятию.

F-строки в python — это современный и очень удобный способ встраивать значения переменных и выражения прямо в текст строки.

Чтобы создать f-строку, просто поставьте букву f перед открывающей кавычкой. Внутри строки вы можете вставлять переменные, обернув их в фигурные скобки {}. Python автоматически заменит {переменная} на её значение.

Сила f-строк в том, что в фигурные скобки можно помещать не просто переменные, а практически любое валидное выражение Python. Это позволяет выполнять вычисления "на лету", не создавая лишних переменных.

Вы можете легко обращаться к элементам структур данных, таких как словари (по ключу) и списки (по индексу), прямо из f-строки.

Точно так же можно обращаться к атрибутам объектов (через точку .) и даже вызывать функции.

Использование f-строк для отладки

Начиная с Python 3.8, в f-строках появился мощный инструмент для быстрой отладки.

Если после имени переменной в фигурных скобках поставить знак равенства (=), Python выведет не только значение переменной, но и её имя. Это невероятно удобно для быстрой проверки значений в коде.

Отладочный спецификатор = можно комбинировать с обычными спецификаторами форматирования. Например, можно вывести имя переменной, а её значение отформатировать особым образом.

Знак = работает для целых выражений, что позволяет наглядно показать и само вычисление, и его результат.


Печать отладочного представления (repr)

У объектов в Python есть два строковых представления: str() (для пользователей) и repr() (для разработчиков). По умолчанию f-строки используют str().

Чтобы управлять этим, можно использовать флаги !s (для str) и !r (для repr) прямо в f-строке. Это более короткий и удобный способ, чем вызывать функции str() или repr() вручную.

Дополнение, выравнивание и усечение

F-строки предоставляют полный контроль над форматированием вывода, включая ширину поля, выравнивание и заполнение.

После переменной ставится двоеточие :, а затем спецификатор формата.

  • > — выравнивание по правому краю

  • < — выравнивание по левому краю

  • ^ — центрирование

  • Число после символа выравнивания задает общую ширину поля.

  • Символ перед выравниванием задает, чем заполнять пустое место (по умолчанию — пробел)

Чтобы обрезать строку до определенной длины, используется синтаксис :.N, где N — максимальное количество символов.

Числа и их представления

Для чисел существует множество полезных форматов.

Вы можете легко конвертировать числа в двоичную (b), восьмеричную (o) или шестнадцатеричную (x/X) системы. Использование # добавляет соответствующий префикс (0b, 0o, 0x).

Часто нужно дополнить число ведущими нулями до определенной длины (например, 0042). Для этого используется 0 в качестве символа-заполнителя. Для чисел с плавающей точкой можно контролировать и общую ширину, и количество знаков после запятой.

Для управления знаком и разделителями существуют специальные символы:

  • +: всегда показывать знак (+42, -42).

  • (пробел): показывать пробел для положительных чисел, минус для отрицательных (42, -42). Удобно для выравнивания в столбец.

  • , или _: использовать как разделитель тысяч

Многие встроенные объекты, как datetime, имеют свой собственный мини-язык форматирования, который можно использовать напрямую в f-строках.

Сами спецификаторы формата не обязаны быть статичными! Их можно задавать с помощью переменных, используя вложенные фигурные скобки.

Если вам нужно вывести в строке сами символы { или }, просто удвойте их.

Многострочные f-строки

Для длинных строк или генерации многострочного текста (например, SQL-запросов, HTML-шаблонов) используйте тройные кавычки. Выражения внутри также могут быть многострочными.

Результат:

Вопросы безопасности (Очень важно!)

Это ключевой аспект, который часто упускают.

F-строки сами по себе безопасны. Когда вы пишете f"Привет, {name}", это не является уязвимостью. Python не выполняет код, который может находиться внутри переменной name. Он просто берет её строковое представление.

Опасность возникает, когда вы комбинируете f-строки с функциями, исполняющими код, такими как eval() или при работе с шаблонизаторами.

Представьте, что вы позволяете пользователю вводить свой собственный шаблон формата.

КРАЙНЕ ОПАСНЫЙ КОД — НИКОГДА ТАК НЕ ДЕЛАЙТЕ:

Если пользователь введет {os.system("reboot")}, ваш сервер перезагрузится. Это уязвимость удаленного выполнения кода (RCE).

Мораль: F-строки предназначены для форматирования строк, шаблоны которых пишет сам разработчик. Никогда не передавайте строки, полученные от пользователя, в eval() или другие исполняющие функции, даже через f-строки. Для пользовательских шаблонов используйте безопасные движки, такие как Jinja2.

Производительность: почему f-строки так быстры?

f-строки быстрее, чем .format() или %. Но почему?

Причина в том, что f-строка — это не функция, а часть синтаксиса Python. Когда Python компилирует ваш .py файл в байт-код, он парсит f-строку и разбивает её на две части:

  1. Литеральные части (обычный текст).

  2. Выражения для вычисления.

В байт-коде это превращается в очень эффективную последовательность инструкций: взять литерал, вычислить выражение, преобразовать его в строку, взять следующий литерал и так далее, а затем объединить все части за одну операцию (BUILD_STRING).

Метод .format() же является обычным вызовом функции. Это означает дополнительные накладные расходы на вызов метода, парсинг строки формата во время выполнения и поиск соответствий между {} и аргументами. F-строки делают большую часть этой работы во время компиляции, что и дает им преимущество в скорости.

4. Инструменты для миграции

flynt и pyupgrade.

  • flynt: Это инструмент, специально созданный для автоматического преобразования старого кода с .format()и%` на f-строки. Он анализирует код и производит замену там, где это возможно.

  • pyupgrade: Более универсальный инструмент. Он не только обновляет синтаксис форматирования строк, но и применяет множество других современных синтаксических конструкций Python (например, super() без аргументов, синтаксис для аннотаций типов и т.д.).

Использование этих инструментов на старой кодовой базе — отличный способ быстро её модернизировать и улучшить читаемость.

Понравилось — ставь «+»
Полезно? Подпишись.
Задавай вопросы в комментариях 👇👇👇
Удачи! 🚀

Показать полностью 18
10

Open Source и будущее капитализма

Прочитал книгу

Прочитал книгу

Пол Мейсон в книге «Посткапитализм: путеводитель по нашему будущему» выдвигает радикальную мысль: информационные технологии не просто трансформируют капитализм, они постепенно подрывают его изнутри. В центре этой трансформации - феномен open source и совместного производства.

Нулевая стоимость копирования

Ключевой аргумент Мейсона заключается в том, что цифровые товары отличаются от всех предыдущих. Если производство автомобиля или стула требует новых затрат на каждый экземпляр, то программа, музыкальный файл или цифровая модель после создания копируются почти бесплатно. Экономисты называют это нулевыми предельными издержками.

В мире, где информация легко тиражируется, рушится основа рыночной системы - дефицит. Рынок всегда опирался на редкость: чем меньше товара, тем выше цена. Но когда продукт можно распространять свободно и массово, привычные механизмы перестают работать.

Википедия, Linux, Firefox

Мейсон иллюстрирует свои тезисы примерами:

  • Википедия, созданная усилиями добровольцев, фактически уничтожила рынок энциклопедий и лишила рекламную индустрию миллиардов долларов доходов.

  • Linux показал, что даже сложнейшие операционные системы можно развивать децентрализованно, без корпоративной иерархии.

  • Firefox доказал, что независимые сообщества способны конкурировать с монополистами вроде Microsoft.

Даже Android, который Google и Samsung коммерциализировали, остаётся вынужденно открытым в своей основе, иначе он потерял бы ту самую энергию сообществ, которая сделала его популярным.

Производство «на равных»

Открытый код - это не благотворительность, а новая форма организации труда. Мейсон называет её «одноранговым производством на равных». Люди участвуют в проектах не ради зарплаты, а потому что хотят сотрудничать, обмениваться знаниями, решать задачи и оставлять след в истории. Здесь мотивация выходит за пределы классического «экономического эгоизма», а деньги перестают быть главной мерой ценности.

Это уже сегодня создаёт «островки посткапитализма» внутри старой системы. Там, где действуют сообщества разработчиков, привычные границы между трудом и хобби, бизнесом и добровольчеством размываются.

Конфликт с капитализмом

Однако капитализм не сдаётся. Чтобы сохранить прибыль, он создаёт монополии, агрессивно защищает интеллектуальную собственность и искусственно поддерживает дефицит. Так формируется противоречие: между возможностью свободного доступа к информации и интересами корпораций, банков и правительств, которые стараются удержать старую модель.

И даже корпорации вынуждены адаптироваться. Microsoft, когда-то называвшая Linux «раком», сегодня является одним из крупнейших контрибьюторов в open source и владельцем GitHub. Google построила свою мобильную империю на открытом ядре Linux. Это не благотворительность, а прагматизм: чтобы оставаться конкурентоспособными, они вынуждены взаимодействовать с «всеобщим интеллектом», используя его и внося свой вклад. Тем самым, даже против своей воли, они легитимизируют и усиливают нерыночные принципы.

«Всеобщий интеллект» и новая экономика

Здесь Мейсон обращается к Марксу и его «Отрывку о машинах». Маркс ещё в XIX веке писал, что по мере развития индустрии главным производительным фактором становится не труд отдельного рабочего, а знание. Коллективное знание, или «всеобщий интеллект», невозможно адекватно оценить в рыночных терминах. Оно разрушает сам фундамент капитализма, который строится на частной собственности и измеримой стоимости.

Вместо итога

Книга Мейсона предлагает интересную перспективу: рассматривать свою деятельность в open source не просто как хобби или способ профессионального развития, а как участие в формировании принципиально нового типа экономических отношений.

Автор: Михаил Шардин
🔗 Моя онлайн‑визитка
📢 Telegram «Умный Дом Инвестора»

13 сентября 2025

Показать полностью 1
23

Сделал Excel умнее: теперь он сам получает котировки с сайтов

Многие частные инвесторы ведут свои портфели в Excel: это удобно, бесплатно и всё — на вашем компьютере. Но у Excel есть слабое место: он не умеет напрямую «разговаривать» с современными сайтами. Если нужно автоматически подтянуть котировку с конкретной страницы в интернете, встроенные веб‑функции часто не справляются: они не умеют обходить современные защиты.

В этой статье я покажу простой и надёжный способ заставить Excel получать котировки практически с любого сайта — на примере курса USD/RUB с investing.com. Идея не требует глубоких технических знаний: вместо того чтобы пытаться что-то делать со страницей в Excel, мы используем на своём компьютере небольшой скрипт‑посредник. Excel просто запрашивает у него одно число, а посредник уже «ходит» на сайт, берёт данные, при необходимости обрабатывает их и возвращает в понятном для Excel виде.

Короткая схема работы:

Приведённый далее Python‑скрипт (набор инструкций для этого «посредника») — это учебный пример: он предназначен исключительно для демонстрации принципа работы с API и веб‑технологиями. Я не призываю и не рекомендую использовать его для обхода правил каких‑либо сайтов.

Все исходные файлы проекта доступны в репозитории на GitHub.

Почему Excel «из коробки» больше не справляется?

Раньше сайты были простыми — статический HTML, и достаточно было послать GET‑запрос (когда вы вводите адрес сайта в браузере и нажимаете Enter, ваш браузер отправляет GET‑запрос) и прочитать нужный кусок страницы. Сегодня веб — это чаще не страницы, а полноценные приложения: данные подгружаются отдельно через JavaScript, содержимое формируется в браузере и может отсутствовать в исходном HTML. Простая формула Excel этого не видит — она получает «скелет» страницы, а не финальный контент.

Плюс появились надёжные системы защиты: Cloudflare и их аналоги анализируют трафик и блокируют подозрительные запросы. Запрос из Excel выглядит «механически» — без cookie, без поведенческих отпечатков, без выполнения JS — и его часто сразу отбрасывают или ставят на проверку CAPTCHA.

Нам нужен инструмент, который умеет вести себя как настоящий браузер: выполнять JS, держать сессию, ставить нужные заголовки. Именно таким инструментом станет локальный скрипт‑посредник — он «ходит» на сайт как человек/браузер, получает чистые числа и возвращает их Excel в простом виде.

Архитектура нашего решения: строим мост между Excel и вебом

Excel — наш «заказчик». Он делает простой запрос к локальному адресу http://localhost:8000/usd_rub/rate и получает готовое значение. Ему не нужно знать про JavaScript, сессии или CAPTCHA — только чистый текст или XML для ячейки.

Python + FastAPI — «умный посредник». Лёгкий локальный сервер принимает запрос от Excel, применяет стратегию получения данных, обрабатывает ответ и отдаёт результат в удобном формате. FastAPI даёт быстрый и документированный интерфейс.

requests и cloudscraper — наши «вездеходы». requests надёжен для простых запросов; cloudscraper помогает обходить защиту Cloudflare, имитируя поведение браузера. Сначала пробуем простой запрос, при ошибке переключаемся на cloudscraper и возвращаем то, что Excel «съест».

Итог: прозрачный локальный мост, скрывающий сложности веба и возвращающий котировки в Excel.

Готовим рабочее место и Excel получает данные

Теперь переходим к самому интересному — практической реализации. Наша цель — запустить локальный сервер‑посредник и научить Excel обращаться к нему за данными. Следуйте этим шагам, и даже если вы никогда не работали с Python, у вас всё получится.

<a href="https://pikabu.ru/story/sdelal_excel_umnee_teper_on_sam_poluchaet_kotirovki_s_saytov_13163325?u=https%3A%2F%2Fgithub.com%2Fempenoso%2Fexcel-data-bridge&t=https%3A%2F%2Fgithub.com%2Fempenoso%2Fexcel-data-bridge&h=6eab63f598f52c5736e06cef28636f5c41c1f28b" title="https://github.com/empenoso/excel-data-bridge" target="_blank" rel="nofollow noopener">https://github.com/empenoso/excel-data-bridge</a>

https://github.com/empenoso/excel-data-bridge

Шаг 1: Создание рабочего пространства

Для начала создайте на вашем компьютере отдельную папку, например, excel-data-bridge. В ней мы будем хранить все наши файлы. Это поможет избежать путаницы и обеспечит корректную работу скриптов.

Поместите в эту папку четыре файла, которые были предоставлены ранее:

  1. investing_proxy.py — наш основной скрипт‑посредник.

  2. requirements.txt — список необходимых Python‑библиотек.

  3. 1_install_requirements.bat — установщик зависимостей.

  4. 2_start_server.bat — запускатор нашего локального сервера.

Шаг 2: Установка необходимых компонентов

Прежде чем наш скрипт сможет работать, ему нужны «помощники» — специальные библиотеки Python. Файл 1_install_requirements.bat сделает всю работу за вас.

Просто дважды кликните по файлу 1_install_requirements.bat. Откроется командная строка, где вы увидите процесс установки. Скрипт сначала проверит, установлен ли у вас Python, а затем скачает и установит все библиотеки из файла requirements.txt. По завершении вы увидите сообщение «Установка завершена!». Это означает, что всё готово к следующему шагу.

Шаг 3: Запуск локального сервера

Теперь, когда все компоненты установлены, запустим наш сервер. Для этого дважды кликните по файлу 2_start_server.bat.

Снова откроется окно командной строки, но на этот раз оно не закроется. Вы увидите сообщения о запуске сервера, а также список доступных адресов (endpoints), по которым Excel сможет обращаться за данными. Пока это окно открыто, ваш сервер работает и готов принимать запросы от Excel. Если вы закроете это окно, сервер остановится.

Шаг 4: Получение данных в Excel

Откройте Microsoft Excel и выберите любую ячейку. Теперь мы используем встроенную функцию ВЕБСЛУЖБА (WEBSERVICE), которая умеет делать запросы по указанному адресу.

  1. Чтобы получить курс USD/RUB, введите в ячейку следующую формулу и нажмите Enter:
    =ВЕБСЛУЖБА("http://localhost:8000/usd_rub/rate")

  2. Чтобы получить дату и время котировки, введите в соседнюю ячейку:
    =ВЕБСЛУЖБА("http://localhost:8000/usd_rub/datetime")

Excel отправит запрос на ваш локальный сервер, тот, в свою очередь, сходит на investing.com, получит данные и вернёт их в ячейку.

Это просто пример - как можно модифицировать под себя?

Это лишь базовый пример, а не готовый универсальный инструмент. Скрипт показывает принцип: Excel делает простой запрос, а посредник достаёт данные с сайта и возвращает результат. Но у каждого инвестора свои задачи: кому‑то нужны котировки акций, кому‑то — нефть или золото, кто‑то захочет загружать таблицы. Именно поэтому код придётся адаптировать под конкретный сайт, формат ответа и даже частоту обновлений. Главное — вы держите в руках рабочий шаблон, который легко модифицировать под себя.

Заключение

Мы не просто решили локальную задачу получения котировок — мы освоили мощный подход к интеграции Excel с современным вебом. Создав локальный API‑посредник, мы научили старый добрый Excel говорить на языке современных веб‑приложений, обходя их защиты и получая актуальные данные.

Этот мост между Python и Excel открывает широкие возможности для автоматизации рутинных операций и делает ваш инвестиционный портфель по‑настоящему «живым» — с автообновляющимися котировками, курсами валют и любыми финансовыми данными из интернета.

Автор: Михаил Шардин
🔗 Моя онлайн‑визитка
📢 Telegram «Умный Дом Инвестора»

9 сентября 2025

Показать полностью 10
11

Ищу нормальные плейлисты с лекциями и семинарами по матану

Ищу нормальные плейлисты с лекциями и семинарами по матану

Вот что я нашел:

Прикол в том что лекции и семинары связаны. То есть учишь не просто теорию, но еще и разбираешься на реальных задачах на семинарах и выполняешь домашку, которую там задали. Плюс еще и с помощью третьего источника можно проверить свои знания после месяца учебы, то есть сделать срез знания. Там есть тесты

Математический анализ. Солодов Алексей Петрович

Часть 1

https://teach-in.ru/course/mathan-lectures-solodov-p1

Часть 2

https://teach-in.ru/course/mathan-lectures-solodov-p2

Часть 3

https://teach-in.ru/course/mathan-lectures-solodov-p3

Часть 4

https://teach-in.ru/course/mathan-lectures-solodov-p4

Математический анализ. Семинары. Косухин Олег Николаевич

Часть 1

https://teach-in.ru/course/mathan-seminars-kosuhin-p1

Часть 2

https://teach-in.ru/course/mathan-seminars-kosuhin-p2

Часть 3

https://teach-in.ru/course/mathan-seminars-kosuhin-p3

Часть 4

https://teach-in.ru/course/mathan-seminars-kosuhin-p4

Анализ 1 (Лектор: Ю.С. Ильяшенко) -- 2017/18 уч. г.

Тут только конспекты, задачи и тесты. Ваще топ, можно порешать задачки и свои знания проверить

https://math.hse.ru/calculus1-17

Показать полностью
8

Alibaba выпустили Qoder — ИИ-редактор кода

Китайцы снова делают магию, их новый инструмент умеет:

- Собирать по простой подсказке полноценные приложения.

- Понимать весь проект целиком.

- Подстраиваться под ваш стиль написания.

- Дробить задачи и закрывать их пошагово.

- Самостоятельно писать спецификацию и вносить правки.

Бесплатно 2 недели

Ссылка

источник

Показать полностью
77

Как сделать умный диктофон бесплатно: превращаем аудио в текст без подписок

В новостях всё чаще говорят об «ИИ‑диктофонах» — гаджетах, которые записывают каждый ваш разговор в течение дня, отправляют аудио в облако, превращают его в текст и даже готовят краткую сводку по итогам. Звучит футуристично, но такие решения стоят дорого, требуют постоянной подписки и вызывают вопросы о приватности.

Лично мне идея тотальной записи кажется избыточной. Зато куда практичнее другая задача: получить точную текстовую расшифровку лекции, доклада или публичного выступления. Чтобы потом не переслушивать часы аудио, а быстро найти нужную цитату или мысль простым поиском по тексту.

Мой купленный за 2 т.р. диктофон с возможностью подключения внешнего микрофона на фоне коробки с ESP32

Мой купленный за 2 т.р. диктофон с возможностью подключения внешнего микрофона на фоне коробки с ESP32

В этой статье я покажу, как построить такую систему без платных подписок и полностью под вашим контролем. Всё, что нужно — обычный диктофон за 1–3 тыс. рублей или даже просто приложение на телефоне — тогда затраты вообще равны нулю, и набор бесплатных, открытых программ, которые работают на вашем компьютере. Я купил диктофон для теста и поделюсь результатами.

Сердцем решения станет OpenAI Whisper — мощная технология распознавания речи от создателей ChatGPT. Главное её преимущество — она может работать полностью автономно на вашем ПК, не отправляя никуда ваши данные. К тому же Whisper распространяется как open‑source: исходный код и модели доступны бесплатно — вы можете скачать, использовать и при необходимости даже модифицировать.

Мои скрипты выложены на GitHub.

Теоретическая часть: что, почему и как?

За последние пару лет появилось немало open‑source решений для распознавания речи, но именно Whisper стал фактическим стандартом. Его модели обучены на колоссальном массиве данных, что обеспечивает высокую точность распознавания. По сравнению с другими бесплатными движками, Whisper даёт результат ближе всего к коммерческим сервисам вроде Google Speech‑to‑Text и при этом работает автономно. Важный плюс — мультиязычность. Русский язык поддерживается «из коробки».

Модели Whisper бывают разных размеров: от tiny до large. На данный момент наиболее актуальной и точной является large-v3. Главный принцип здесь — компромисс между скоростью, точностью и требуемыми ресурсами (в первую очередь, видеопамятью). У меня видеокарта NVIDIA GeForce RTX 5060 Ti 16 ГБ, поэтому на тестах использую large модель, она требует ~10 ГБ VRAM, но можно начать и со small модели — для неё достаточно ~2 ГБ VRAM.

Не стоит забывать и о приватности: все данные остаются у вас на компьютере. Никаких облачных серверов, никаких подписок. Что понадобится для запуска?

Железо: компьютер с Linux (я использую Ubuntu, но у меня стоит двойная загрузка Windows & Linux через rEFInd Boot Manager). Рекомендуется видеокарта NVIDIA — GPU многократно ускоряет работу, хотя на CPU тоже всё запустится, только медленнее. В качестве источника звука я тестировал обычный диктофон за пару тысяч рублей.

Диктофон за 1–3 тыс. рублей. Много их

Диктофон за 1–3 тыс. рублей. Много их

Софт:

  • Python — язык, на котором работает весь стек.

  • FFmpeg — универсальный конвертер аудио/видео.

  • PyTorch — фреймворк, на котором обучены модели.

  • NVIDIA Drivers и CUDA — для связи с видеокартой.

Практическая часть: пошаговая инструкция

Теперь перейдём от теории к практике и соберём рабочую систему распознавания. Я разбил процесс на несколько шагов — так будет проще повторить.

Шаг 1. Подготовка окружения

Когда‑то я собирал dlib с поддержкой CUDA для для того чтобы распознать лица всех соседей с камеры в подъезде. Тогда я прошёл через несовместимости, конфликты версий и ручную сборку библиотек. Поэтому к установке Whisper я уже был подготовлен.

Чтобы избавить вас от всего этого «удовольствия», я написал универсальный bash‑скрипт setup_whisper.sh. Он берёт на себя всю грязную работу по настройке окружения на Ubuntu 24:

  • обновляет систему и ставит базовые пакеты, включая Python и FFmpeg;

  • проверяет драйверы NVIDIA и при необходимости устанавливает их;

  • подтягивает CUDA Toolkit;

  • создаёт виртуальное окружение Python и внутри него ставит PyTorch (учитывая модель видеокарты);

  • загружает сам Whisper и полезные библиотеки;

  • запускает тест, проверяющий, что GPU действительно работает.

Запуск прост:

chmod +x setup_whisper.sh
./setup_whisper.sh

Запуск ./<!--noindex--><a href="https://pikabu.ru/story/kak_sdelat_umnyiy_diktofon_besplatno_prevrashchaem_audio_v_tekst_bez_podpisok_13139759?u=http%3A%2F%2Fsetup_whisper.sh&t=setup_whisper.sh&h=f58aabf40a080560fc15ad80d1fc1f7e5a70a861" title="http://setup_whisper.sh" target="_blank" rel="nofollow noopener">setup_whisper.sh</a><!--/noindex-->

Запуск ./setup_whisper.sh

Полный код setup_whisper.sh на Гитхабе.

Шаг 2. Запись и подготовка аудио

Чем лучше исходная запись, тем меньше ошибок. Записывайте ближе к источнику звука, избегайте шумных помещений и треска. Whisper работает с самыми популярными форматами: mp3, wav, m4a, так что конвертировать вручную не придётся.

Шаг 3. Массовая расшифровка всех подряд записей

Здесь в игру вступает мой второй скрипт — whisper_transcribe.py. Он:

  • автоматически находит все аудиофайлы в папке;

  • использует GPU (если доступен), ускоряя работу в десятки раз;

  • сохраняет результат в нескольких форматах:

    • .txt для текста,

    • .srt с таймкодами (можно открыть как субтитры),

    • all_transcripts.txt — общий файл со всеми расшифровками.

Пример использования:

# Активируем окружение
source .venv/bin/activate

# Запуск по умолчанию (ищет аудио в текущей папке)
python3 whisper_transcribe.py

# Указываем папку с файлами, модель и папку для результатов
python3 whisper_transcribe.py ./audio large ./results

Полный код whisper_transcribe.py на Гитхабе.

python3 <!--noindex--><a href="https://pikabu.ru/story/kak_sdelat_umnyiy_diktofon_besplatno_prevrashchaem_audio_v_tekst_bez_podpisok_13139759?u=http%3A%2F%2Fwhisper_transcribe.py&t=whisper_transcribe.py&h=09be7b3f2a230f2b2d73bca5864e682c8502fa2d" title="http://whisper_transcribe.py" target="_blank" rel="nofollow noopener">whisper_transcribe.py</a><!--/noindex--> ./audio large ./results

python3 whisper_transcribe.py ./audio large ./results

Шаг 4. Анализ результатов

После обработки вы получите полный набор файлов. Например:

  • some_lecture.txt — текст лекции;

  • some_lecture.srt — субтитры вида:

    12 00:04:22,500 --> 00:04:26,200 Здесь спикер рассказывает о ключевой идее...

  • all_transcripts.txt — всё сразу в одном документе.

Я проверил систему на часовом файле. Модель large на моей RTX 5060 Ti справилась за ~8 минут.

Разделение по спикерам (диаризация) - почему это сложно?

А если записывать не лекцию, а совещание? На записи говорят пять человек, и вам нужно понять, кто именно что сказал. Обычный Whisper выдаёт сплошной текст без указания человека. Здесь на помощь приходит диаризация — технология, которая анализирует голосовые характеристики и помечает фрагменты как «Спикер 1», «Спикер 2» и так далее.

Для этого существует WhisperX — расширенная версия Whisper с поддержкой диаризации. Однако при попытке установки я опять столкнулся с классической проблемой ML‑экосистемы: конфликтом зависимостей. WhisperX требует определённые версии torchaudio, которые несовместимы с новыми драйверами NVIDIA для RTX 5060 Ti.

Решение мне подсказали: Docker‑контейнеры NVIDIA. По сути, это готовые «коробки» с предустановленным софтом для машинного обучения — разработчики уже решили все проблемы совместимости за вас. NVIDIA поддерживает целую экосистему таких контейнеров через NGC (NVIDIA GPU Cloud), а сообщество создает специализированные образы под конкретные задачи. Вместо многочасовой борьбы с зависимостями достаточно одной команды docker pull, и вы получаете полностью рабочую среду с предустановленным WhisperX, настроенным PyTorch и всеми библиотеками. В данном случае контейнер ghcr.io/jim60105/whisperx включает диаризацию из коробки и отлично работает с современными GPU.

Диаризация откроет новые возможности: автоматическую генерацию протоколов встреч с указанием авторства реплик, анализ активности участников дискуссий, создание интерактивных расшифровок с навигацией по спикерам.

Это тема для отдельной статьи, которую планирую выпустить после тестирования Docker‑решения на реальных многоголосых записях.

Заключение

Мы собрали систему, которая позволяет бесплатно и полностью автономно расшифровывать лекции, выступления, а в перспективе и совещания. В основе — OpenAI Whisper, а все настройки и запуск упрощают мои open source скрипты. Достаточно один раз подготовить окружение — и дальше вы сможете регулярно получать точные транскрипты без подписок и риска приватности.

Следующий шаг — диаризация. Это позволит автоматически разделять текст по спикерам и превращать расшифровку совещания в полноценный протокол с указанием авторства.

Автор: Михаил Шардин
🔗 Моя онлайн‑визитка
📢 Telegram «Умный Дом Инвестора»

2 сентября 2025

Показать полностью 5
19

Освоение форматирования ячеек Excel с помощью Python: Полное руководство

В этом посте мы рассмотрим, как использовать бесплатную библиотеку Python для Excel для программного форматирования ячеек в файлах Excel. Вы научитесь устанавливать свойства шрифта, выравнивание, границы, цвета заливки, форматы чисел и изучите продвинутые техники, такие как условное форматирование.

  • Введение в бесплатную библиотеку Spire.XLS

  • Как форматировать ячейки в Excel с помощью Python

  • Продвинутые техники форматирования ячеек

  • Пример комплексной реализации

  • Заключение

Введение в бесплатную библиотеку Spire.XLS

Бесплатная библиотека Spire.XLS для Python — это легковесная, но мощная библиотека, которая позволяет создавать, редактировать и форматировать файлы Excel без необходимости установки Microsoft Excel.

Чтобы начать, установите библиотеку через pip:

pip install spire.xls.free

После установки вы можете начать создавать файлы Excel или изменять существующие. Вот простой пример, как создать новый файл Excel и добавить в него начальные данные:

from spire.xls import *

workbook = Workbook()

workbook.CreateEmptySheet()

sheet = workbook.Worksheets[0]

sheet.Range["A1"].Text = "Привет, мир!"

workbook.SaveToFile("output.xlsx")

Этот код создает новый файл Excel с именем "output.xlsx" и текстом "Привет, мир!" в ячейке A1.

Как форматировать ячейки в Excel с помощью Python

Программное форматирование ячеек включает в себя установку таких свойств, как шрифт, выравнивание, границы и заливки. Давайте рассмотрим, как это сделать с помощью бесплатной библиотеки Spire.XLS.

Установка свойств шрифта

Вы можете настроить стиль шрифта, размер и цвет ячейки. Например:

font = sheet.Range["A1"].Style.Font

font.Name = "Arial"

font.Size = 12

font.IsBold = True

font.Color = Color.FromArgb(40, 255, 0, 0)

Установка выравнивания

Выравнивание текста в ячейке или диапазоне ячеек может улучшить читаемость. Вот как установить горизонтальное и вертикальное выравнивание:

cell = sheet.Range["A1"]

cell.Style.HorizontalAlignment = HorizontalAlignType.Left

cell.Style.VerticalAlignment = VerticalAlignType.Bottom

range = sheet.Range["B1:D1"]

range.Style.HorizontalAlignment = HorizontalAlignType.Center

range.Style.VerticalAlignment = VerticalAlignType.Center

Добавление границ

Чтобы выделить ваши данные, вы можете добавить границы к ячейкам или диапазонам:

cell = sheet.Range["A1"]

border = cell.Style.Borders[BordersLineType.EdgeTop]

border.LineStyle = LineStyleType.Thick

border.Color = Color.get_Green()

border = cell.Style.Borders[BordersLineType.EdgeBottom]

border.LineStyle = LineStyleType.Double

border.Color = Color.get_Blue()

Установка цвета заливки или узора ячейки

Для улучшения визуальной ясности вы можете применить сплошные цветовые заливки или узорные фоны к ячейкам:

cell = sheet.Range["A1"]

cell.Style.Color = Color.get_LightBlue()

cell = sheet.Range["A2"]

cell.Style.FillPattern = ExcelPatternType.Percent125Gray

Объединение или разъединение ячеек

Объединение ячеек особенно полезно для создания заголовков, охватывающих несколько столбцов. Вы можете объединить или разъединить ячейки следующим образом:

sheet.Range["A1:C1"].Merge()

sheet.Range["B1:C1"].UnMerge()

Применение форматов чисел

Excel предлагает различные форматы чисел, такие как валюта, дата и процент. Вот как применить форматы чисел:

sheet.Range["A1"].NumberValue = 1234.567

sheet.Range["A1"].NumberFormat = "0.00"

sheet.Range["A2"].NumberValue = 0.25

sheet.Range["A2"].NumberFormat = "0%"

sheet.Range["A3"].NumberValue = 43831

sheet.Range["A3"].NumberFormat = "yyyy-mm-dd"

sheet.Range["A4"].NumberValue = 1234.567

sheet.Range["A4"].NumberFormat = "$#,##0.00"

Продвинутые техники форматирования ячеек

Как только вы освоите основы, вы можете изучить более продвинутые техники форматирования. Например, вы можете применять правила условного форматирования для динамического форматирования ячеек на основе их значений.

Условное форматирование

Условное форматирование — это мощный инструмент, который выделяет тенденции или аномалии в ваших данных. Вот пример:

range = sheet.Range["A1:A10"]

format = range.ConditionalFormats.AddCondition()

format.FormatType = ConditionalFormatType.CellValue

format.Operator = ComparisonOperatorType.Greater

format.FirstFormula = "100"

format.BackColor = Color.get_Green()

format.IsBold = True

Форматирование ячеек с помощью пользовательского стиля

Создание и применение пользовательских стилей ячеек может помочь поддерживать согласованность на протяжении всего вашего рабочего файла. Вот как определить пользовательский стиль:

style = workbook.Styles.Add("customStyle")

style.Font.IsBold = True

style.Font.Size = 12

style.Font.Color = Color.FromArgb(20, 0, 0, 255)

style.BackgroundColor = Color.FromArgb(20, 255, 255, 0)

style.Borders.All = LineStyleType.Dashed

style.Borders.Color = Color.get_Purple()

sheet.Range["A2:F2"].Style = style

Копирование формата ячейки

Чтобы эффективно реплицировать форматирование по диапазонам, вы можете копировать стили. Это сохраняет все свойства без ручной перенастройки:

style = sheet.Range["A1"].Style

sheet.Range["A2:F5"].Style = style

Пример комплексной реализации

Теперь давайте объединим все в комплексном примере, который обобщает все обсуждаемые техники:

from spire.xls import *

from spire.xls.common import *

workbook = Workbook()

worksheet = workbook.Worksheets[0]

worksheet.Name = "Пример комплексного стиля"

# Создание строки заголовка

title = worksheet.Range["A1:E1"]

title.Merge()

title.Text = "Информация о сотрудниках"

title.Style.Font.FontName = "Arial"

title.Style.Font.Size = 16

title.Style.Font.Color = Color.get_White()

title.Style.Color = Color.get_DarkBlue()

title.Style.HorizontalAlignment = HorizontalAlignType.Center

title.Style.VerticalAlignment = VerticalAlignType.Center

title.RowHeight = 30

# Установка заголовков

headers = ["ID", "Имя", "Отдел", "Дата приема", "Зарплата"]

for i, header in enumerate(headers):

cell = worksheet.Range[2, i + 1]

cell.Text = header

cell.Style.Font.IsBold = True

cell.Style.Color = Color.get_LightGray()

cell.Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Medium

cell.Style.Borders[BordersLineType.EdgeBottom].Color = Color.get_DarkBlue()

# Заполнение данных

data = [

[1, "Чжан Сан", "Технический отдел", "2020-05-15", 15000],

[2, "Ли Си", "Маркетинговый отдел", "2019-08-22", 12000],

[3, "Ван У", "Отдел кадров", "2021-03-10", 13500],

[4, "Жао Лю", "Финансовый отдел", "2018-11-05", 16000]

]

for r, row in enumerate(data):

for c, value in enumerate(row):

cell = worksheet.Range[r + 3, c + 1]

if c == 3:  # Дата

cell.DateTimeValue = DateTime.Parse(value)

cell.NumberFormat = "yyyy-mm-dd"

elif c == 4:  # Зарплата

cell.NumberValue = value

cell.NumberFormat = "$#,##0.00"

else:

cell.Text = str(value)


# Установка чередующихся цветов строк

if r % 2 == 0:

cell.Style.Color = Color.get_LightYellow()

else:

cell.Style.Color = Color.get_LightCyan()

# Установка границ

worksheet.Range["A2:E6"].BorderAround(LineStyleType.Medium, Color.get_Black())

worksheet.Range["A2:E6"].BorderInside(LineStyleType.Thin, Color.get_Gray())

# Авто подгонка ширины столбцов

for i in range(1, 6):

worksheet.AutoFitColumn(i)

# Добавление условного форматирования - выделение ячеек с зарплатой больше 14000

format = worksheet.Range["E3:E6"].ConditionalFormats.AddCondition()

format.FormatType = ConditionalFormatType.CellValue

format.Operator = ComparisonOperatorType.Greater

format.FirstFormula = "14000"

format.FontColor = Color.get_Red()

format.IsBold = True

# Получение выделенного диапазона

locatedRange = worksheet.AllocatedRange

# Проход по строкам

for rowNum in range(1, locatedRange.RowCount):

# Выравнивание текста по центру

locatedRange.Rows[rowNum].HorizontalAlignment = HorizontalAlignType.Center

locatedRange.Rows[rowNum].VerticalAlignment = VerticalAlignType.Center

# Установка высоты строки

locatedRange.Rows[rowNum].RowHeight = 20

# Проход по столбцам

for columnNum in range(0, locatedRange.ColumnCount):

# Установка ширины столбца

if(columnNum == 2):

locatedRange.Columns[columnNum].ColumnWidth = 19

else:

locatedRange.Columns[columnNum].ColumnWidth = 14

# Сохранение книги

workbook.SaveToFile("ComprehensiveStyleExample.xlsx", FileFormat.Version2016)

workbook.Dispose()

Освоение форматирования ячеек Excel с помощью Python: Полное руководство

Заключение

В этом руководстве вы узнали, как форматировать ячейки в Excel с помощью Python и библиотеки Free Spire.XLS. От базовых техник форматирования до продвинутых функций, таких как условное форматирование, теперь вы можете программно создавать визуально привлекательные файлы Excel.

Показать полностью 1
Отличная работа, все прочитано!