>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
Python

Uspokajanie chaosu tabelarycznego prosto z terminala

Build status Coverage status PyPI downloads Version License Support Python versions

Jeśli regularnie otrzymujesz eksporty danych, z pewnością znasz ten ból. Plik o rozmiarze trzystu megabajtów, kodowanie Windows-1251, separator to średnik w niektórych miejscach i przecinek w innych, a do tego nieescape'owane podziały wierszy wewnątrz rekordów. Otwarcie czegoś takiego w Excelu to pewny sposób na całkowite zamrożenie pakietu biurowego lub przypadkowe usunięcie zer wiodących z numerów telefonów. Napisanie szybkiego skryptu w Pythonie z pandas tylko po to, by zrobić podstawową weryfikację, też jest kłopotliwe.

W takich sytuacjach z pomocą przychodzi csvkit — zestaw narzędzi wiersza poleceń do pracy z danymi tabelarycznymi. Projekt istnieje na GitHubie od 2011 roku, zgromadził ponad 6400 gwiazdek i wciąż pozostaje jednym z najwygodniejszych sposobów na analizę plików CSV bezpośrednio w bashu.

Co potrafi ten zestaw narzędzi

Twórcy pakietu, dziennikarze z agencji informacyjnej Wire Services, zainspirowali się narzędziami takimi jak pdftk i GDAL. Pomysł jest prosty: dać programistom i analitykom danych zestaw wyspecjalizowanych poleceń do potoków UNIX, umożliwiających czyszczenie, wycinanie, formatowanie i eksplorację plików tabelarycznych bez pisania kodu.

Narzędzia są podzielone według zadań: konwersja, wycinanie, analiza i wykonywanie zapytań SQL.

Szybki podgląd i podstawowa statystyka

Polecenie csvlook zamienia surowy plik CSV w czytelną tabelę ASCII z prawidłowym wyrównaniem kolumn. W połączeniu z head lub less otrzymujesz doskonały podgląd:

head -n 20 data.csv | csvlook

Jeśli musisz zrozumieć strukturę nieznanego pliku, uruchom csvstat. Narzędzie analizuje typy danych w każdej kolumnie, znajduje brakujące wartości, oblicza minimum, maksimum, średnią i pokazuje listę najczęściej występujących wartości:

csvstat data.csv

Wycinanie i filtrowanie

Tradycyjne narzędzia UNIX, takie jak cut i grep, często zawodzą na złożonych plikach CSV, gdy przecinki lub podziały wierszy pojawiają się wewnątrz cytowanych pól. Pakiet oferuje wyspecjalizowane alternatywy:

csvcut wycina potrzebne kolumny według nazwy lub numeru:

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

csvgrep filtruje wiersze według wartości lub wyrażeń regularnych:

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

SQL bezpośrednio na plikach

Jednym z najwygodniejszych poleceń jest csvsql. Potrafi zrobić dwie rzeczy. Po pierwsze, generuje schemat DDL dla PostgreSQL, MySQL lub SQLite na podstawie analizy typów danych w pliku. Po drugie, pozwala pisać zapytania SQL bezpośrednio na plikach CSV na dysku za pomocą wbudowanego SQLite:

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

Możesz też połączyć dwa różne pliki tak, jakby były zwykłymi tabelami bazy danych:

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

Konwersja formatów

Narzędzie in2csv konwertuje praktycznie wszystko do formatu CSV: pliki Excel (.xls i .xlsx), JSON, NDJSON oraz format o stałej szerokości pól. Nie trzeba uruchamiać Excela tylko po to, by zapisać otrzymany raport w innym formacie:

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

Jak to działa pod maską

Pakiet jest napisany w Pythonie i dystrybuowany przez PyPI. Wykorzystuje SQLAlchemy do operacji bazodanowych, co tłumaczy elastyczność csvsql podczas pracy z różnymi dialektami SQL.

Główną zaletą tej architektury jest kompatybilność ze standardowym wejściem i wyjściem (stdin/stdout). Polecenia można łatwo łączyć za pomocą zwykłego potoku:

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

To podejście ma jednak pewien minus. Ponieważ biblioteka jest napisana w czystym Pythonie z kontrolą typów w czasie wykonywania, wydajność spada na plikach o rozmiarze wielu gigabajtów. W przypadku eksportów na skalę terabajtów lepiej sprawdzą się xsv napisany w Rust lub duckdb, ale do codziennych zadań do kilkuset megabajtów prędkość csvkit jest więcej niż wystarczająca.

Gdzie przydaje się w praktyce

  1. Sprawdzanie struktury danych na serwerze zdalnym bez GUI.
  2. Wstępne czyszczenie plików w skryptach bash przed załadowaniem do potoku ETL.
  3. Generowanie schematów tabel bazy danych dla nowego eksportu (csvsql -i postgresql data.csv).
  4. Szybkie łączenie dwóch różnych plików według wspólnego klucza za pomocą csvjoin.

Czy warto zainstalować

Pakiet instaluje się jednym poleceniem pip:

pip install csvkit

Jeśli często parsujesz logi, pracujesz z importami baz danych lub otrzymujesz raporty jako archiwa z plikami Excel i CSV, ten zestaw narzędzi zaoszczędzi Ci mnóstwo nerwów. Eliminuje potrzebę otwierania ciężkiego edytora lub pisania jednorazowych skryptów do podstawowego filtrowania dwóch kolumn. Zacznij od csvlook i in2csv — zwrócą koszty instalacji w ciągu pierwszych pięciu minut użytkowania.

Powiązane projekty