Как приручить хаос в таблицах прямо из терминала

25 авг 2026
6,409
685
126
1 месяц

Build status Coverage status PyPI downloads Version License Support Python versions

Если вам регулярно присылают выгрузки данных, вы наверняка знаете эту боль. Файл на триста мегабайт, кодировка Windows-1251, разделитель где-то точка с запятой, где-то запятая, а внутри строк встречаются неэкранированные переносы. Открывать такое в Excel — верный способ подвесить офисный пакет намертво или случайно обрезать лидирующие нули в номерах телефонов. Писать ради быстрой проверки скрипт на Python с pandas тоже лень.

В таких ситуациях выручает csvkit — набор утилит командной строки для работы с табличными данными. Проект живет на GitHub с 2011 года, набрал больше 6400 звезд и до сих пор остается одним из самых удобных способов препарировать CSV прямо в bash.

Что умеет этот набор утилит

Создатели пакета, журналистское объединение Wire Services, вдохновлялись инструментами вроде pdftk и GDAL. Идея простая: дать разработчику и дата-аналитику набор специализированных команд под UNIX-пайплайны, чтобы чистить, резать, форматировать и исследовать табличные файлы без написания кода.

Утилиты разбиты по задачам: конвертация, нарезка, анализ и выполнение SQL-запросов.

Реклама

Быстрый просмотр и базовая статистика

Команда csvlook превращает сырой CSV в аккуратную ASCII-таблицу с правильным выравниванием колонок. В сочетании с head или less получается отличный предпросмотр:

head -n 20 data.csv | csvlook

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

csvstat data.csv

Нарезка и фильтрация

Традиционные UNIX-утилиты вроде cut и grep часто ломаются на сложных CSV, когда внутри полей в кавычках встречаются запятые или переносы строк. В пакете есть специализированные аналоги:

csvcut вырезает нужные колонки по именам или номерам:

csvcut -c "user_id,email,status" users.csv > clean_users.csv

csvgrep фильтрует строки по значениям или регулярным выражениям:

csvgrep -c "status" -m "active" users.csv

SQL прямо поверх файлов

Одна из самых удобных команд — csvsql. Она умеет две вещи. Во-первых, генерирует DDL-схему для PostgreSQL, MySQL или SQLite на основе анализа типов данных в файле. Во-вторых, дает возможность писать SQL-запросы прямо к CSV-файлам на диске через встроенный SQLite:

csvsql --query "select status, count(*) from users group by status" users.csv

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

csvsql --query "select u.name, o.total from users u join orders o on u.id = o.user_id" users.csv orders.csv

Конвертация форматов

Инструмент in2csv переводит в CSV практически всё: файлы Excel (.xls и .xlsx), JSON, NDJSON и фиксированную ширину (fixed-width). Больше не нужно запускать Excel, чтобы пересохранить присланный отчет:

in2csv report.xlsx --sheet "Sales" > sales.csv

Как это устроено внутри

Пакет написан на Python и распространяется через PyPI. Для работы с базами данных используется SQLAlchemy, что объясняет гибкость csvsql при работе с разными диалектами SQL.

Главный плюс архитектуры — совместимость со стандартным вводом и выводом (stdin/stdout). Команды легко связываются через обычный пайп:

in2csv data.xlsx | csvgrep -c "country" -m "RU" | csvcut -c 1,3,5 | csvlook

У такого подхода есть и обратная сторона. Поскольку библиотека написана на чистом Python с проверкой типов на лету, на файлах размером в несколько гигабайт скорость работы падает. Для терабайтных выгрузок лучше взять xsv на Rust или duckdb, но для повседневных задач до пары сотен мегабайт скорости csvkit хватает с головой.

Где это пригодится на практике

  1. Проверка структуры данных на удаленном сервере без GUI.
  2. Предварительная очистка файлов в bash-скриптах перед загрузкой в ETL-пайплайн.
  3. Генерация схемы таблиц базы данных под новую выгрузку (csvsql -i postgresql data.csv).
  4. Быстрое объединение двух разрозненных файлов по общему ключу через csvjoin.

Стоит ли ставить

Устанавливается пакет одной командой через pip:

pip install csvkit

Если вы часто разбираете логи, работаете с импортом баз данных или получаете отчеты в виде архивов с Excel и CSV, этот набор утилит сбережет кучу нервов. Он избавляет от необходимости открывать тяжелый редактор или писать одноразовые скрипты ради элементарной фильтрации двух колонок. Начните с csvlook и in2csv — они окупают установку в первые пять минут использования.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.