Работа с файлами Excel часто включает очистку ненужных пустых строк и столбцов для обеспечения согласованности и читаемости данных. В этой статье мы рассмотрим, как использовать библиотеку Free Excel для Python, чтобы программно удалять пустые строки и столбцы из файлов Excel.
Установка необходимой библиотеки
Мы используем Free Spire.XLS для Python для работы с файлами Excel (XLS, XLSX, XLSB и т. д.) без необходимости в Microsoft Excel. Эта библиотека предоставляет широкий спектр возможностей, включая:
Создание, чтение и редактирование файлов Excel
Форматирование ячеек, строк и столбцов
Извлечение данных из таблиц
Конвертация файлов Excel в другие форматы
Чтобы начать, вы можете установить библиотеку из PyPI с помощью следующей команды pip:
Следующий скрипт на Python демонстрирует, как эффективно удалить пустые строки и столбцы из файла Excel.
Пошаговое объяснение:
Загрузите файл Excel: Скрипт начинается с загрузки входного файла Excel с помощью Workbook.LoadFromFile().
Получите таблицу: Первая таблица извлекается для обработки.
Удалите пустые строки: Код проходит по строкам в обратном порядке (чтобы избежать проблем с сдвигом индексов) и удаляет любые пустые строки с помощью IsBlank.
Удалите пустые столбцы: Аналогично, он проверяет каждый столбец на наличие пустых ячеек и удаляет их, если они пустые.
Сохраните измененный файл: Очищенный файл сохраняется в указанном выходном каталоге.
Вот полный код:
from spire.xls import *
from spire.xls.common import *
# Загрузить файл Excel
workbook = Workbook()
workbook.LoadFromFile("Input.xlsx")
# Получить первую таблицу
sheet = workbook.Worksheets.get_Item(0)
# Проход по строкам, начиная с последней к первой
for i in range(sheet.Rows.Length - 1, -1, -1):
# Проверка, является ли строка пустой
if sheet.Rows.get_Item(i).IsBlank:
# Удалить пустые строки
sheet.DeleteRow(i + 1)
# Проход по столбцам, начиная с последнего к первому
Цикл выполняется в обратном порядке (range(…, -1, -1)), чтобы предотвратить несоответствие после удаления.
IsBlank проверяет, является ли вся строка или столбец пустым.
Выход сохраняется в формате Excel 2016, но поддерживаются и другие форматы (например, XLS, CSV).
Заключение
В этой статье мы рассмотрели, как определить и удалить пустые строки и столбцы в таблице с помощью Free Spire.XLS для Python. Надеюсь, это будет полезно!
Главные переменные параметров Игрока и бота: hp, hp_evil. По умолчанию оба поставлены на 100
Краткое руководство:
Навигация по главной странице: 1. Начать. - Начать игру 2. Настройки. - Переход в настройки. Можно изменить параметры игрока и бота. 3.Выход. - Выход
Навигация по меню главной игры: 1. Атака (5–20 урона) - Атаковать врага. Сила удара может быть в радиусе 5 - 20 hp. Чем больше удар, тем меньше вероятность. 2. Здоровье (+5 – +20 HP) - Выздороветь в радиусе 5 - 20 hp. Чем больше выздоровление, тем меньше вероятность. 3. Бегство (0–10 потерь) - Избежать удара. Вероятность больше избежать удар, чем получить
После каждого хода Игрока ход передается Боту.
Бот также может выбрать действия, у которых также присутствует вероятность.
Для изменения цвета шрифта библиотеки не требуются!
В последнее время я активно занимаюсь автоматизацией торговли и знакомлюсь с разными решениями, два раза летал на конференции, познакомился с интересными людьми. На этом фоне я наткнулся на open-source проект cia76/FinLabPy, о котором уже давно слышал, но никогда не разбирался подробно.
Российская алготорговля переживает странный период: возможности растут, но стандартизации как будто не существует. Брокеры выпускают свои API, но каждый из них живёт в отдельной вселенной — со своим обозначением тикеров, задержками и внезапными отключениями.
Про проблемы алготорговли на Московской бирже почти не пишут, хотя есть мнение что 60% оборота биржи создаётся роботами. А вот автор этого проекта Игорь Чечет на своём вебинаре рассказывает о том с какими проблемами может столкнуться частный инвестор, когда приходит в алгоритмическую среду.
Начну с главного - какую вообще проблему решает FinLabPy?
Что такое FinLabPy и какую проблему он решает
cia76/FinLabPy — это унифицированная платформа для анализа рынков, прототипирования торговых идей, тестирования стратегий и запуска автоторговли через нескольких российских брокеров.
Необходимость создания такой библиотеки возникла потому что российские брокеры реализовали API «каждый в меру своих возможностей». Несколько примеров:
Финам: может самостоятельно отваливать подписки.
Т-Инвест: присылает сделки пачками и с задержкой; бары иногда запаздывают на 2–3 минуты.
Алор: любит перезагружать сервер прямо во время торгов.
QUIK: использует свою экзотическую систему тикеров вида TQBR.SBER.
У каждого своя спецификация данных, свои ограничения и свои «фичи», которые на деле превращаются в головную боль.
FinLabPy по словам его создателя забирает всю эту боль себе: переподключения, нормализация данных, логирование, кэширование, обработка ошибок, единые тикеры — всё это зашито в open‑source библиотеке.
Архитектура: три уровня, которые упрощают жизнь разработчику
FinLabPy устроена на трёх уровнях что меня удивило:
Нижний слой: нативные API брокеров. REST, WebSocket, GRPC — всё, что брокер даёт.
Средний слой: Python‑обёртки. Отдельные проекты под каждого брокера:
AlorPy
FinamPy
QuikPy
TinvestPy (Т‑Инвест)
(в работе) обёртка для БКС
Верхний слой: FinLabPy Единый интерфейс, единая модель данных, единая логика. При этом доступ к «уникальным» функциям конкретного брокера сохраняется: FinLabPy → provider.provider → уникальные методы обёртки.
Вообще меня порадовало, что внутри нет самодельных велосипедов
Технологический стек FinLabPy
Автор сознательно взял лучшие решения рынка и встроил их в экосистему. Никакого изобретения велосипеда.
Основные элементы:
Python
Backtrader — тестирование и автоторговля
TA‑Lib — более 200 индикаторов
Pandas и NumPy
TradingView Lightweight Charts — графики
aiogram — Telegram‑боты
Jupyter Notebook — исследования
На своём стриме автор поднимает и другие вопросы, например где запускать торговых роботов?
Только на VPS под Linux (Debian/Ubuntu). Причины:
стабильный интернет,
нет NAT, DHCP и прочих «домашних» сюрпризов,
нет DPI и странных блокировок провайдеров,
скорость соединения «сервер → брокер» всегда выше.
Стоимость VPS: 150–400 рублей в месяц.
Кэширование, спецификации тикеров и работа с расписаниями
FinLabPy строит целую подсистему работы с данными, которая сильно облегчает жизнь.
Кэширование данных. Чтобы:
уменьшить количество запросов к API брокера;
ускорить прогон стратегий;
обходить лимиты (100 запросов в минуту, данные по 1 дню и т. д.).
Кэш хранится в локальных файлах и пополняется пошагово (инкрементально).
Спецификации инструментов. Отдельно кэшируются:
шаг цены,
минимальный лот,
доступная история свечей (у разных брокеров — разная),
прочие параметры.
Есть отдельный модуль для работы с расписаниями Московской биржи. Стратегия всегда знает, когда открытие/закрытие сессии, какая сейчас стадия торгов, и может корректно обрабатывать данные.
Telegram-интеграции и мультиброкерская работа
Меня, работающего с несколькими брокерам и, особенно это зацепило. У автора всё это сведено в слой — «мультиброкерский пакет», где есть готовые Telegram‑боты:
сводка по всем счетам,
баланс,
открытые позиции,
уведомления.
Используется aiogram, поддерживается и Discord.
Зачем мультиброкерность?
запуск одной стратегии на нескольких брокерах;
диверсификация инфраструктурных рисков;
удобство тестирования;
возможность легко «мигрировать» между брокерами.
Переключение брокера = изменение параметра в конфиге.
Backtrader: стандарт де-факто, но с оговорками
Автор прямо говорит, что Backtrader — мощный инструмент, но он заброшен. В планах:
либо создать собственный форк и привести архитектуру в порядок,
либо полностью переписать движок,
но сохранить совместимость со всеми существующими стратегиями.
Веб-интерфейс, gRPC и клиент-серверная архитектура
Логическим продолжением разговора стала архитектура будущей версии. Автор явно движется к полноценной платформе. Планы развития со слов Игоря выглядят так:
Веб‑интерфейс. Для визуализации, анализа и, возможно, полноценной работы с роботами. Примерно как «домашний терминал».
gRPC. FinLabPy + роботы работают на VPS (сервер), а аналитика и управление — с локального ПК через gRPC‑клиент. Это даст:
безопасность,
скорость,
возможность разнести вычисления и интерфейс.
Из трёх часов стрима я отметил для себя несколько рекомендаций.
Практические советы разработчикам
Игорь на стриме регулярно подчёркивает несколько вещей:
Не изобретайте велосипеды. TradingView для графиков, TA‑Lib для индикаторов, Backtrader для торговли — всё уже существует.
Запускайте роботов только на VPS под Linux.
Используйте подробное логирование (DEBUG). Особенно в период отладки подписок и торговых операций.
Помните: унификация ограничена возможностями «самого слабого» брокера. Если нужны уникальные функции — используйте методы конкретной обёртки напрямую.
Немного юридических моментов
Не обошлось и без юридических деталей — неожиданный, но важный момент, который автор пояснил. Автор планирует сертифицировать FinLabPy в реестре российского ПО Минцифры. Это нужно:
для защиты авторских прав;
для потенциальной интеграции библиотеки брокерами или биржей.
Но для обычных трейдеров это вроде как никак не меняет ситуацию: проект планируется open-source.
Что пока остаётся «за кадром»
Как человек, который интересуется не только инфраструктурой, но и моделями, я отметил список тем, которые автор пока не стал раскрывать:
продвинутые методы бэктестинга (walk-forward, Монте-Карло),
управление рисками и портфельные модели,
оптимизацию производительности,
структуру конфигов,
интеграцию LLM / AI в торговые системы.
Фокус шёл именно на инфраструктуру и унификацию.
Итог
Лично я воспринимаю cia76/FinLabPy как один из самых многообещающих open‑source проектов под российскую алготорговлю. Это попытка создать единый стандарт, которого брокеры не смогли (или не захотели) создать сами.
Если вы пишете торговых роботов под российских брокеров — присмотреться к FinLabPy определённо стоит.
BUSY Bar — это продвинутый фокус-таймер с функцией блокировки отвлекающих приложений и интеграцией в умный дом. В этом посте мы покажем как, используя HTTP API, можно создавать виджеты для BUSY Bar. Это смогут сделать не только разработчики, но и обычные пользователи.
Далее вы узнаете как:
Вывести изображения и текст на экран BUSY Bar.
Взаимодействовать с устройством прямо из браузера.
Создать виджеты без программирования.
Виджеты, которые мы сделаем в этой статье
Прежде чем начать создавать виджеты, давайте познакомимся с HTTP API и с тем, как его использовать.
Один API для всех типов подключения
HTTP API — это протокол для взаимодействия с BUSY Bar, доступный через все 3 поддерживаемые типа подключения:
USB Ethernet — при подключении BUSY Bar к ПК, он определяется как сетевой адаптер с виртуальной сетью.
Wi-Fi сеть— быстрое, беспроводное подключение. BUSY Bar можно разместить где угодно в зоне действия Wi-Fi.
Cloud-сервер— удаленное управление через интернет с шифрованием и авторизацией по ключу, используя API-токен, выпускаемый в личном кабинете BUSY.
Благодаря использованию одинакового HTTP API во всех трех типах подключения, можно переключаться между ними без переписывания кода.
Как работает HTTP API в BUSY Bar
Как следует из названия, HTTP API основан на протоколе HTTP, который используется для передачи данных в интернете, между браузером и web-сервером. Когда вы вводите URL сайта, ваш браузер отправляет HTTP запрос и сервер возвращает web-страницу в ответе.
Взаимодействие web-браузера и web-сервера по протоколу HTTP
Взаимодействие с BUSY Bar устроено похожим образом. BUSY Bar выполняет роль HTTP сервера и ожидает запросы, а ПО на ПК выполняет роль HTTP клиента. Этим ПО может быть любая программа, поддерживающая отправку HTTP-запросов, например, система умного дома, приложение или скрипт.
Скрипт или приложение отправляет запрос и BUSY Bar возвращает данные в формате JSON
Благодаря широкой поддержке HTTP в языках программирования, обращаться к BUSY Bar можно с помощью всего нескольких строк кода. А некоторые простые запросы, такие как запрос общей информации о BUSY Bar, могут быть отправлены прямо из браузера - просто открытием http://10.0.4.20/api/status/system.
Запрос /api/status/system возвращает общую информацию о BUSY Bar
ℹ️ В случае использования USB-подключения IP-адрес BUSY Bar'а всегда будет 10.0.4.20 — он даже указан на задней крышке устройства. При подключении через Wi‑Fi IP-адрес назначается роутером. В следующих примерах мы будем использовать USB-подключение.
IP-адрес BUSY Bar’а указан на задней крышке устройства
Документация HTTP API прямо на устройстве
Все поддерживаемые HTTP-запросы, их параметры и форматы ответов описаны в документации HTTP API, которая хостится прямо на устройстве. При подключении по USB она доступна по адресу: http://10.0.4.20/docs.
Документация HTTP API, открытая с устройства
Открыть документацию HTTP API также можно с главной страницы web-интерфейса BUSY Bar, который доступен по адресу http://10.0.4.20.
Главная страница web-интерфейса BUSY Bar и ссылка на документацию HTTP API на ней
HTTP-запросы можно тестировать прямо на странице с документацией, выполнив следующее:
Выберите запрос, например: /api/display/draw(вывод текста и картинок на экран).
Нажмите Try it out.
Скорректируйте параметры запроса.
Нажмите кнопку Execute, чтобы отправить запрос на BUSY Bar.
После нажатия Execute браузер отправляет HTTP API-запрос в BUSY Bar, который возвращает ответ, указывающий либо на успешное выполнение (OK), либо на ошибку (Bad Request), если с запросом что-то не так. В случае успеха BUSY Bar выводит на экран «HELLO, WORLD!».
[Видео] При успешном выполнении запроса BUSY Bar выводит на экран строку "HELLO, WORLD!"
Как AI может помочь использовать HTTP API
В сети есть тонны гайдов, обсуждений и примеров кода для работы с HTTP. А еще со всеми этими знаниями умеют работать AI-ассистенты. Поэтому даже без навыков программирования вы можете создавать виджеты для BUSY Bar.
ℹ️ Для продвинутых пользователей мы также предлагаем готовые библиотеки для Python и JavaScript, реализующие наш HTTP API.
Для создания виджета с помощью AI-ассистента (ChatGPT, Gemini, Claude и других) нужно:
Объяснить ему, как выводить картинки и текст на экран (1 промпт).
Объяснить, что должен делать виджет (1-2 промпта).
Попросить устранить недостатки (0-10 промптов).
В результате вы получите скрипт, который запускается на ПК и по HTTP API отправляет UI виджета на подключенный по USB девайс.
Скрипт работает на ПК и отрисовывает виджет на экране BUSY Bar через HTTP API
Дальше мы покажем на реальных практических примерах, как можно сделать виджет, не прибегая к программированию. Мы будем использовать ChatGPT. Все сгенерированные AI-скрипты доступны по ссылкам на каждом шаге.
Шаг 0: Учим AI использовать экран BUSY Bar
При создании каждого виджета сначала нужно объяснить AI, как использовать HTTP API, а именно два запроса:
/api/assets/upload — для загрузки картинок в память BUSY Bar.
/api/display/draw — для вывода текста и ранее загруженных картинок.
Промпт к AI (сделан на основе документации HTTP API):
Результат: AI теперь умеет через USB выводить на экран изображения и тексты, а также использовать разные шрифты и цвета текста.
Делаем виджет часов
Для начала, просто для тренировки, сделаем очень простой виджет — часы с датой. Время и дата будут браться с ПК и обновляться на экране BUSY Bar раз в секунду. Время выведем крупным шрифтом — чаще всего увидеть его важнее, чем дату.
Шаг 1: Вывод времени и даты
🤖 Промпт к AI: Выведи на экран текущую дату (мелко) и время (крупно) по центру экрана. Формат даты — день.месяц.год. Время выведи с секундами.
Результат: AI написал скрипт на языке Python. Его нужно сохранить в файл с расширением .py и запустить командой python file.ру (Windows) или python3 file.ру (Linux/macOS).
Мы получили готовый виджет всего за 3 промпта. Единственное замечание — AI выравнивает текст по центру с погрешностью, т.к. символы имеют разную ширину (например, цифр 1 и 5). В следующей версии HTTP API мы добавим выравнивание текста по горизонтали и вертикали, что полностью решит эту проблему.
Делаем погодный виджет
Скрипт, запущенный на ПК, будет получать погоду из открытых источников в интернете и выводить ее на экран BUSY Bar для нескольких городов. Для каждого города скрипт выведет иконку погоды, город и температуру.
Шаг 1: Вывод погоды
🤖 Промпт к AI: Сделай скрипт, выводящий поочередно погоду в 3 городах: Dubai, London, New York с паузой 3 секунды. Погоду бери из открытых источников без необходимости регистрации.
[Видео] Погодный виджет. Шаг 1: Вывод погоды в 3 городах
Видно, что скрипт успешно получает погодные данные, но из-за быстрой прокрутки текста и частого переключения городов прочитать сейчас ничего невозможно. Исправим это.
Шаг 2: Улучшение интерфейса
🤖 Промпт к AI: Слева на экран выведи иконку погоды (16×16), пусть скрипт сам их нарисует. Справа выведи: город (мелко) и температуру (крупно).
[Видео] Погодный виджет. Шаг 3: Теперь символ градуса отображается корректно
Почти готово. Смущают только непонятные погодные иконки. Похоже, что это слабая сторона ChatGPT. Почему бы тогда не использовать погодные иконки из эмодзи?
Шаг 4: Делаем красивые иконки
Нужно подготовить иконки для основных погодных явлений (солнечно, облачно, дождь и т.д.). Сами иконки можно взять в открытых источниках — например, существует отличный шрифт Noto Color Emoji 16.0 от компании Google. Изображения всех символов доступны в репозитории на GitHub.
Эти картинки нужно смасштабировать до 16×16 и сохранить в папке icons, которая должна быть расположена в папке со скриптом. После этого нужно попросить AI доработать скрипт.
🤖 Промпт к AI: Сделай вывод иконок из готовых файлов, которые я положил в папку icons: cloud.png, fog.png, partly.png, rain.png, snow.png, sun.png.
🚀 Готово! В скрипте можно изменять список городов. Можно оставить только один город и тогда будет отображаться только его погода, обновляясь каждые 3 секунды.
Делаем пинг-монитор
Ping — это способ проверки доступности устройств в сети. Смысл в отправке специального запроса на IP-адрес проверяемого узла и измерении времени от отправки запроса до получения ответа.
Этот параметр важен в некоторых онлайн играх, где от скорости реакции игрового сервера и качества соединения может зависеть исход игры. Поэтому полезно иметь индикатор пинга, обновляющийся в реальном времени.
Индикатор пинга в игре Pokémon UNITE
Шаг 1: Вывод графика пинг
🤖 Промпт к AI: Сделай скрипт, который выводит график пинга игрового сервера по IP. Обновление графика раз в секунду. В верхнем левом углу выведи пинг маленьким шрифтом.
AI сгенерировал скрипт, который принимает IP-адрес сервера в качестве параметра. Поэтому адрес нужно указать при запуске скрипта. Например, если адрес сервера — 8.8.8.8, то для мониторинга его доступности команда будет выглядеть так:
[Видео] Пинг-монитор. Шаг 1: На экран выведен график и текущее значение пинга
Отлично, почти готово. Но непонятно, какие именно значения мы видим на графике. Но это и не так важно. Важнее, чтобы сразу можно было увидеть отклонения пинга от нормальных значений. Мы можем использовать разные цвета, чтобы обозначить хороший, средний и плохой пинг.
Шаг 2: Разукрашиваем график
🤖 Промпт к AI: Пусть на графике столбцы, соответствующие 0-20 мс, будут зелеными, 21-50 — желтыми, а больше 50 — красными. Высота шкалы — 100 мс.
[Видео] Пинг-монитор. Шаг 2: График разукрашивается в соответствии со значением пинга
Супер! Осталась одна маленькая, косметическая, деталь — вывод логотипа игры в левой части экрана.
Шаг 3: Добавляем логотип игры
🤖 Промпт к AI: Давай еще слева от графика выведем логотип игры CS:GO.
AI просит, чтобы файл с логотипом игры назывался csgo.png и лежал в папке со скриптом. Нагуглим подходящую картинку, смасштабируем до 16×16 и сохраним.
🚀 Готово! Всего за несколько шагов, не прибегая к программированию, мы смогли создать наглядный виджет. Его можно использовать не только для мониторинга доступности игрового сервера, но и в целом для мониторинга доступности любых других серверов в LAN или интернете.
Скоро Kickstarter
В начале 2026 года мы запустим нашу Kickstarter-кампанию. Оформите предзаказ в нашем магазине чтобы получить доступ к специальной цене для первых заказов когда кампания начнется: https://busy.bar/shop
Подпишитесь на наши X, Instagram и Reddit, чтобы следить за обновлениями BUSY Bar.
Instagram — продукт компании Meta Platforms Inc., признанной экстремистской организацией, деятельность которой запрещена на территории Российской Федерации.
Сколько вы сделали за год? (Наверное, уже многие отметили такую дату). Сколько работающих проектов, прототипов, скриптов, а может опробованных других языков программирования. Может уже замом замов в ВК/Яше-Финтехе стали?