Сообщить об ошибке.

CLI для различных преобразований и анализа CSV-файлов в Python

Модуль csvkit - это набор инструментов командной строки (CLI) для различных преобразований, анализа и просто работы с CSV-файлами.

Модуль csvkit имеет встроенную поддержку для чтения входных файлов, сжатых в gzip, bz2 и xz (LZMA). Сжатие автоматически определяется на основе расширения файла и не требует добавления дополнительных опций CLI.

Включает в себя 14 инструментов:

  • in2csv - преобразует различные форматы табличных данных в CSV (dbf, fixed, geojson, json, ndjson, xls, xlsx).
  • csvstat - выводит описательную статистику для всех столбцов в файле CSV. Будет интеллектуально определять тип каждого столбца, а затем распечатывать анализ, относящийся к этому типу (диапазоны для дат, среднее значение и медиана для целых чисел и т. д.).
  • csvlook - отображает CSV-файл в командной строке в формате с фиксированной шириной, совместимом с Markdown.
  • csvcut - фильтрует и усекает CSV-файлы. Подобно команде Unix cut, но для табличных данных.
  • csvgrep - фильтрует табличные данные только по тем строкам, в которых определенные столбцы содержат заданное значение или соответствуют регулярному выражению.
  • csvjoin - объединяет две или более таблиц CSV вместе, используя метод, аналогичный операции SQL JOIN.
  • csvsort - сортировка CSV-файлов. Подобно команде Unix sort, но для табличных данных.
  • sql2csv - выполняет произвольные команды для базы данных SQL и выводит результаты в виде CSV.
  • csvsql - генерируйте инструкции SQL для CSV-файла или выполняет эти инструкции непосредственно в базе данных. В последнем случае поддерживается как создание таблиц, так и вставка данных.
  • csvclean - очищает файл CSV от распространенных синтаксических ошибок:
    • сообщает о строках, которые имеют другое количество столбцов, чем строка заголовка
    • пытается исправить CSV, объединяя короткие строки в одну строку
  • csvstack - складывает строки из нескольких CSV-файлов, при необходимости добавив значение группировки в каждую строку.
  • csvformat - преобразует файл CSV в пользовательский выходной формат (пользовательский разделитель и т.д.).
  • csvjson - преобразует CSV-файл в JSON или GeoJSON (в зависимости от флагов)
  • csvpy - загружает CSV-файл в объект agate.csv.Reader, а затем переходит в оболочку Python, чтобы пользователь мог просматривать данные так, как считает нужным.

Установка csvkit:

Установка csvkit в виртуальное окружение Python.

# создаем виртуальное окружение, если нет
$ python3 -m venv .venv --prompt VirtualEnv
# активируем виртуальное окружение 
$ source .venv/bin/activate
# обновляем `pip`
(VirtualEnv):~$ python3 -m pip install -U pip
# установим модуль `csvkit`:
(VirtualEnv):~$ python3 -m pip install csvkit

Если необходимо установить csvkit как системное приложение CLI, то лучше использовать уже скомпилированный пакет для установки через apt install ..., дабы избежать конфликтов системных Python пакетов ОС Linux.

$ sudo apt install csvkit

Для просмотра примеров скачаем файл с данными:

$ wget https://raw.githubusercontent.com/wireservice/csvkit/master/examples/realdata/ne_1033_data.xlsx

Все инструменты модуля csvkit принимают входной файл через "стандартный ввод". Это означает, что с помощью символа | ("канал"), можно использовать вывод одного инструмента csvkit в качестве ввода следующего.

Параметры CLI, общие для всех инструментов.

  • -d DELIMITER, --delimiter DELIMITER - символ-разделитель входного CSV-файла.
  • -t, --tabs - указывает, что входной файл CSV разделен табуляцией. Переопределяет -d.
  • -q QUOTECHAR, --quotechar QUOTECHAR - символ, используемый для кавычек строк во входном CSV-файле.
  • -u {0,1,2,3}, --quoting {0,1,2,3} - стиль цитирования, используемый во входном CSV-файле. 0 = Цитата минимальная, 1 = Цитата вся, 2 = Цитата нечисловая, 3 = Цитата отсутствует.
  • -b, --no-doublequote - будут ли удваиваться двойные кавычки во входном CSV-файле.
  • -p ESCAPECHAR, --escapechar ESCAPECHAR - символ, используемый для экранирования разделителя, если указано --quoting 3 ('Нет кавычек'), и для экранирования QUOTECHAR, если указано --no-doublequote.
  • -z FIELD_SIZE_LIMIT, --maxfieldsize FIELD_SIZE_LIMIT - максимальная длина одного поля во входном CSV-файле.
  • -e КОДИРОВАНИЕ, --encoding КОДИРОВАНИЕ - кодировка входного CSV-файла.
  • -L LOCALE, --locale LOCALE - локаль (en_US) любых отформатированных чисел.
  • -S, --skipinitialspace - игнорировать пробелы сразу после разделителя.
  • --blanks - не приводить пустые строки 'na', 'n/a', 'none', 'null', '.' к значениям NULL.
  • --date-format DATE_FORMAT - строка формата даты date.strptime, например '%m/%d/%Y'.
  • --datetime-format DATETIME_FORMAT - строка формата даты и времени datetime.strptime, например '%m/%d/%Y %I:%M %p'.
  • -H, --no-header-row - во входном CSV-файле нет строки заголовка. Создаст заголовки по умолчанию (a,b,c,...).
  • -K SKIP_LINES, --skip-lines SKIP_LINES - количество начальных строк, которые нужно пропустить перед строкой заголовка (например, комментарии, уведомления об авторских правах, пустые строки).
  • -v, --verbose - выводить подробные трассировки при возникновении ошибок.
  • -l, --linenumbers - вставляет столбец с номерами строк в начало. Полезно при передаче в grep или в качестве простого первичного ключа.
  • --zero - при интерпретации или отображении номеров столбцов используйте нумерацию, начинающуюся с нуля, вместо нумерации по умолчанию, начинающуюся с 1.- -d DELIMITER, --delimiter DELIMITER — символ-разделитель входного CSV-файла.

Содержание:


Утилита in2csv: преобразование данных в CSV.

И так скаченные данные находятся в формат Excel. Если установлен Excel, то можно открыть файл и посмотреть на данные, но кто хочет ждать загрузки Excel? Посмотрим его через csvkit:

$ in2csv ne_1033_data.xlsx | csvlook | less -S

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

Теперь конвертируем файл Excel его в CSV:

$ in2csv ne_1033_data.xlsx > data.csv

Утилита in2csv может преобразовывать различные распространенные форматы файлов в CSV, включая файлы Excel .xls и .xlsx, файлы JSON и файлы с фиксированной шириной полей с данными.

Параметры CLI утилиты in2csv:

  • -f {csv,dbf,fixed,geojson,json,ndjson,xls,xlsx} - Формат входного файла. Если не указано, будет определяться из типа файла.
  • -s SCHEMA, --schema SCHEMA - файл схемы в формате CSV для преобразования файлов фиксированной ширины.
  • -k KEY, --key KEY - ключ верхнего уровня для поиска списка объектов, подлежащих преобразованию при обработке JSON.
  • -n, --names - отображение имен листов из входного файла Excel.
  • --sheet SHEET - имя листа Excel для преобразования.
  • --write-sheets WRITE_SHEETS - имена листов Excel для записи в файлы или "-" для записи всех листов.
  • --encoding-xls ENCODING_XLS - кодировка входного XLS-файла.

Утилита csvlook: удобный просмотр CSV-данных.

Файл data.csv теперь будет содержать CSV-версию исходного файла ne_1033_data.xlsx. Можно убедиться, что данные сохранены в новый файл, используя утилиту csvlook для его печати в терминал:

$ csvlook data.csv | less -S

По данным можно перемещаться вверх и вниз и влево - вправо (если все данные не помещаются по горизонтали). Нажмите латинскую букву q для выхода.

Параметры CLI утилиты csvlook:

  • --max-rows MAX_ROWS - Максимальное количество отображаемых строк перед усечением данных.
  • --max-columns MAX_COLUMNS - Максимальное количество столбцов для отображения до усечения данных.
  • --max-column-width MAX_COLUMN_WIDTH - Обрезать все столбцы не более чем до этой ширины. Остаток будет заменен многоточием.

Утилита csvcut: просмотр определенных столбцов CSV.

Утилита csvcut это оригинальный инструмент модуля csvkit. С его помощью можно выбирать, удалять и изменять порядок отображения столбцов. Посмотрим, какие столбцы есть в представленных данных:

$ csvcut -n data.csv
#  1: state
#  2: county
#  3: fips
#  4: nsn
#  5: item_name
#  6: quantity
#  7: ui
#  8: acquisition_cost
#  9: total_cost
# 10: ship_date
# 11: federal_supply_category
# 12: federal_supply_category_name
# 13: federal_supply_class
# 14: federal_supply_class_name

Видно, что набор данных состоит из четырнадцати столбцов. Посмотрим только на столбцы 2, 5 и 6, тем самым сократим выходные данные всего до трех столбцов:

$ csvcut -c 2,5,6 data.csv | csvlook

Также можно ссылаться на столбцы по их названиям и чтобы облегчить себе жизнь добавим команду less:

$ csvcut -c county,item_name,quantity data.csv | csvlook | less

Урезанные данные можно сохранить в новый файл:

$ csvcut -c 2,5,6 data.csv > data_cut.csv

Параметры CLI утилиты csvcut:

  • -n, --names - Выводит имена столбцов и индексы из входного CSV-файла и выходит.
  • -c COLUMNS, --columns COLUMNS - Разделенный запятыми список индексов столбцов, имен или диапазонов, подлежащих извлечению, например "1,id,3-5". По умолчанию все столбцы.
  • -C NOT_COLUMNS, --not-columns NOT_COLUMNS - Разделенный запятыми список индексов столбцов, имен или диапазонов, подлежащих исключению, например "1,id,3-5". По умолчанию нет
  • -x, --delete-empty-rows - После вырезания удаляет полностью пустые строки

Утилита csvstat: статистика без кода.

Утилита csvstat предназначен для того, чтобы дать широкое представление о данных в csv-файле. Вдохновленный функцией summary() из языка программирования вычислительной статистики R, csvstat будет генерировать сводную статистику для всех данных в файле CSV.

Рассмотрим сводную статистику для нескольких столбцов из набора данных:

csvcut -c county,acquisition_cost,ship_date data.csv | csvstat

Утилита csvstat определяет тип данных в каждом столбце, а затем выполняет базовую статистику по ним. Конкретная вычисляемая статистика зависит от типа столбца (числа, текст, даты и т.д.).

В этом примере первый столбец, county, был идентифицирован как текстовый тип. Мы видим, что в наборе данных представлено 35 округов, и что DOUGLAS встречается чаще всего.

Столбец acquisition_cost имеет тип Number. Видно, что наибольшая стоимость составила 412000,0. (Вероятно, долларов, но не будем предполагать.) Общая стоимость приобретения составила 5 430 787,55.

Наконец, столбец ship_date (тип Date) показывает, что самые ранние данные относятся к 2006 году, а самые поздние - к 2014 году. Также можем отметить, что необычно большое количество пришлось на дату 2013-04-25.

Параметры CLI утилиты csvstat:

  • --csv - Выводить результаты в формате CSV, а не в виде текста.
  • -n, --names - Показать имена столбцов и индексы из входного CSV и выйти.
  • -c COLUMNS, --columns COLUMNS - разделенный запятыми список индексов столбцов, имен или диапазонов для проверки, например "1,id,3-5". По умолчанию все столбцы.
  • --type - Выводить только тип выходных данных
  • --nulls - Выводить только те столбцы, которые содержат пустые значения..
  • --unique - Выводить только количество уникальных значений.
  • --min - Выводить только наименьшие значения.
  • --max - Выводить только наибольшее значения.
  • --sum - Выводить только суммы.
  • --mean - Только вывод.
  • --median - Только только медианы.
  • --stdev - Выводить только стандартные отклонения.
  • --len - Выводить только длину самых длинных значений.
  • --freq - Выводить только списки часто встречающихся значений.
  • --freq-count FREQ_COUNT - максимальное количество часто отображаемых значений.
  • --count - Выводить только общее количество строк.
  • --decimal-format DECIMAL_FORMAT - спецификация формата % для вывода десятичных чисел. По умолчанию используется форматирование, зависящее от локали, с '%.3f'.
  • -G, --no-grouping-separator - Не использует группирующие разделители в десятичных числах.

Утилита csvgrep: ищем нужные данные.

Можно использовать csvgrep для поиска имени состояния среди столбцов/строк. Дополнительно используем csvcut, чтобы просмотреть интересующие столбцы, и csvlook для форматирования вывода:

$ csvcut -c county,item_name,total_cost data.csv |\
> csvgrep -c county -m LANCASTER | csvlook
# | county    | item_name                      | total_cost |
# | --------- | ------------------------------ | ---------- |
# | LANCASTER | RIFLE,5.56 MILLIMETER          |        120 |
# | LANCASTER | RIFLE,5.56 MILLIMETER          |        120 |
# | LANCASTER | RIFLE,5.56 MILLIMETER          |        120 |
# | LANCASTER | RIFLE,5.56 MILLIMETER          |        120 |
# | LANCASTER | RIFLE,5.56 MILLIMETER          |        120 |
# | LANCASTER | RIFLE,5.56 MILLIMETER          |        120 |
# | LANCASTER | RIFLE,5.56 MILLIMETER          |        120 |
# | LANCASTER | RIFLE,5.56 MILLIMETER          |        120 |
# | LANCASTER | RIFLE,5.56 MILLIMETER          |        120 |
# | LANCASTER | RIFLE,5.56 MILLIMETER          |        120 |
# | LANCASTER | LIGHT ARMORED VEHICLE          |          0 |
# | LANCASTER | LIGHT ARMORED VEHICLE          |          0 |
# | LANCASTER | LIGHT ARMORED VEHICLE          |          0 |
# | LANCASTER | MINE RESISTANT VEHICLE         |    412 000 |
# | LANCASTER | IMAGE INTENSIFIER,NIGHT VISION |      6 800 |
# | LANCASTER | IMAGE INTENSIFIER,NIGHT VISION |      6 800 |
# | LANCASTER | IMAGE INTENSIFIER,NIGHT VISION |      6 800 |
# | LANCASTER | IMAGE INTENSIFIER,NIGHT VISION |      6 800 |

Флаг -m означает вхождение строки в подстроку и найдет текст в любом месте заданного столбца - в данном случае столбца county. Для тех, кому нужен более мощный поиск, также можно использовать -r для поиска по регулярному выражению.

Параметры CLI утилиты csvgrep:

  • -n, --names - Отображение имен столбцов и индексов из входного CSV.
  • -c COLUMNS, --columns COLUMNS - Разделенный запятыми список индексов столбцов, имен или диапазонов для поиска, например. '1,id,3-5'.
  • -m PATTERN, --match PATTERN - Строка для поиска..
  • -r REGEX, --regex REGEX - Регулярное выражение для соответствия.
  • -f MATCHFILE, --file MATCHFILE - Путь к файлу. Для каждой строки, если какая-либо строка в файле (без разделителей строк) точно соответствует значению ячейки, совпадающей строки.
  • -i, --invert-match - Выбирает не совпадающие строки вместо совпадающих строк.
  • -a --any-match - Выбирает строки, в которых соответствует любой столбец, а не все столбцы

Утилита csvsort: сортировка данных.

Теперь воспользуемся csvsort для сортировки строк по столбцу total_cost в обратном (убывающем) порядке:

$ csvcut -c county,item_name,total_cost data.csv |\
> csvgrep -c county -m LANCASTER | csvsort -c total_cost -r | csvlook
# | county    | item_name                      | total_cost |
# | --------- | ------------------------------ | ---------- |
# | LANCASTER | MINE RESISTANT VEHICLE         |    412 000 |
# | LANCASTER | IMAGE INTENSIFIER,NIGHT VISION |      6 800 |
# | LANCASTER | IMAGE INTENSIFIER,NIGHT VISION |      6 800 |
# | LANCASTER | IMAGE INTENSIFIER,NIGHT VISION |      6 800 |
# | LANCASTER | IMAGE INTENSIFIER,NIGHT VISION |      6 800 |
# | LANCASTER | RIFLE,5.56 MILLIMETER          |        120 |
# | LANCASTER | RIFLE,5.56 MILLIMETER          |        120 |
# | LANCASTER | RIFLE,5.56 MILLIMETER          |        120 |
# | LANCASTER | RIFLE,5.56 MILLIMETER          |        120 |
# | LANCASTER | RIFLE,5.56 MILLIMETER          |        120 |
# | LANCASTER | RIFLE,5.56 MILLIMETER          |        120 |
# | LANCASTER | RIFLE,5.56 MILLIMETER          |        120 |
# | LANCASTER | RIFLE,5.56 MILLIMETER          |        120 |
# | LANCASTER | RIFLE,5.56 MILLIMETER          |        120 |
# | LANCASTER | RIFLE,5.56 MILLIMETER          |        120 |
# | LANCASTER | LIGHT ARMORED VEHICLE          |          0 |
# | LANCASTER | LIGHT ARMORED VEHICLE          |          0 |
# | LANCASTER | LIGHT ARMORED VEHICLE          |          0 |

Утилита csvjoin: объединение связанных данных.

Одна из наиболее распространенных операций, которые необходимо выполнять с данными - это "присоединение" их к другим связанным данным. Утилита csvjoin позволяет взять два набора данных и объединить их, как с запросом SQL JOIN. По умолчанию, выполняется внутреннее объединение. Выполнить полное внешнее соединение, а не стандартное внутреннее можно указав флаг --outer. Объединение LEFT JOIN и RIGHT JOIN также доступны через флаги --left и --right соответственно.

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

Например:

$ csvjoin -c 1 join_a.csv join_b.csv
# или
$ csvjoin -c index join_a.csv join_b.csv

Добавим два пустых столбца справа от CSV-файла:

echo "," | csvjoin examples/dummy.csv -

Добавим один пустой столбец справа от CSV-файла:

echo "new-column" | csvjoin examples/dummy.csv -

Параметры CLI утилиты csvjoin:

  • -c COLUMNS, --columns COLUMNS - Имена столбцов, к которым необходимо присоединиться. Должно быть либо одно имя (или индекс), либо список, разделенный запятыми, с одним именем (или индексом) для каждого файла в том же порядке, в котором файлы были указаны. Если не указано, два файла будут соединены последовательно без сопоставления.
  • --outer - Выполняет полное внешнее соединение, а не внутреннее соединение по умолчанию.
  • --left - Выполняет левое внешнее соединение, а не внутреннее соединение по умолчанию. Если предоставлено более двух файлов, то будет выполнено как последовательность левых внешних соединений, начиная с левого файла.
  • --right - Выполняет правое внешнее соединение, а не внутреннее соединение по умолчанию. Если предоставлено более двух файлов, то будет выполнено как последовательность правых внешних соединений, начиная с правого файла.
  • -I, --no-inference - Отключает определение типа при анализе CSV.

Обратите внимание, что операция соединения требует чтения всех файлов в память.

Утилита csvstack: объединение подмножеств.

Часто большие наборы данных распределены во множестве небольших файлов (например логи). В какой-то момент необходимо будет объединить эти файлы для массового анализа. Утилита csvstack позволяет "складывать" строки из CSV-файлов с одинаковыми столбцами (и одинаковыми именами столбцов).

$ csvstack data1.csv data2.csv data3.csv > data.csv

Внимание! Если перенаправить выходные данные во входной файл, например csvstack file.csv > file.csv, то размер файла будет увеличиваться бесконечно.

Если указать флаг -g, то csvstack также может добавить "столбец группировки" к каждой строке, чтобы можно было определить, из какого файла взята каждая строка.

Например, объединение набора файлов за разные годы:

$ csvstack -g 2009,2010 data1.csv data2.csv

Добавим один новый столбец слева:

$ csvstack -n NEWCOL -g "" data.csv

Флаг -n - имя для столбца группировки, например "NEWCOL". Используется только при указании -g.

Параметры CLI утилиты csvstack:

  • -g GROUPS, --groups GROUPS - Список значений, разделенных запятыми, для добавления в качестве "факторов группировки", по одному для каждого складываемого CSV-файла. Они добавляются к выходным данным как новый столбец. Можно указать имя для нового столбца, используя флаг -n.
  • -n GROUP_NAME, --group-name GROUP_NAME - Имя столбца группировки, например. 'year'. Используется только при указании -g.
  • --filenames - Использует имя файла каждого входного файла в качестве значения его группировки. Если указано, -g будет игнорироваться.

Утилита csvsql, создание базы данных из CSV-файла.

Почти всегда командной строки недостаточно. Было бы безумием пытаться выполнить весь анализ с помощью инструментов командной строки. Часто правильным инструментом для анализа данных является SQL. Утилиты csvsql и sql2csv образуют мост, который упрощает миграцию данных в базу данных SQL и из нее. Для небольших наборов данных csvsql также может использовать sqlite, чтобы выполнять специальные SQL-запросы, даже не касаясь базы данных.

По умолчанию csvsql сгенерирует SQL-код для создания таблицы для данных в CSV-файле. Можно указать желаемую базу данных (для которой генерируется код создания таблицы) с флагом -i:

$ csvsql -i sqlite data.csv
# CREATE TABLE data (
#         state VARCHAR NOT NULL, 
#         county VARCHAR NOT NULL, 
#         fips FLOAT NOT NULL, 
#         nsn VARCHAR NOT NULL, 
#         item_name VARCHAR, 
#         quantity FLOAT NOT NULL, 
#         ui VARCHAR NOT NULL, 
#         acquisition_cost FLOAT NOT NULL, 
#         total_cost FLOAT NOT NULL, 
#         ship_date DATE NOT NULL, 
#         federal_supply_category FLOAT NOT NULL, 
#         federal_supply_category_name VARCHAR NOT NULL, 
#         federal_supply_class FLOAT NOT NULL, 
#         federal_supply_class_name VARCHAR NOT NULL
# );

Также можно использовать csvsql для создания таблицы непосредственно в базе данных. Если вы добавите параметр --insert, данные также будут импортированы:

$ csvsql --db sqlite:///data.db --insert data.csv

Подключение к базам данных sqlite:///data.db по правилам, описанным в разделе "Диалект" модуля sqlalchemy.

SQL-запросы непосредственно в CSV!

Если необходимо выполнить только один SQL запрос к данным, то и построение базы данных будет пустой тратой времени. В этом случае можно полностью пропустить создание базы данных, так как csvsql создаст ее в памяти:

$ csvsql --query "select county,item_name,total_cost \
> from data where quantity > 5;" data.csv | csvlook | less

Имейте в виду, что при использовании этого поведения, загружается весь набор данных в память, поэтому для больших наборов данных это может быть очень медленным.

Параметры CLI утилиты csvsql:

  • -i {firebird,mssql,mysql,oracle,postgresql,sqlite,sybase,crate} - Диалект SQL для генерации. Не может использоваться с --db.
  • --db CONNECTION_STRING - Если присутствует, строка подключения SQLAlchemy, используемая для непосредственного выполнения сгенерированного SQL в базе данных.
  • --query QUERY - Выполняет один или несколько SQL-запросов, разделенных символом ';' и выводит результат последнего запроса в формате CSV. QUERY может быть именем файла.
  • --insert - Вставляет данные в таблицу. Требует --db.
  • --prefix PREFIX - Добавляет выражение после ключевого слова INSERT, например OR IGNORE или OR REPLACE.
  • --before-insert BEFORE_INSERT - Выполняет SQL перед командой INSERT. Требует --insert.
  • --after-insert AFTER_INSERT - Выполняет SQL после команды INSERT. Требует --insert.
  • --tables TABLE_NAMES - Разделенный запятыми список имен создаваемых таблиц. По умолчанию таблицы будут называться по именам файлов без расширений.
  • --no-constraints - Создает схему без ограничений по длине или проверок на null. Полезно при выборке больших таблиц.
  • --unique-constraint UNIQUE_CONSTRAINT - Разделенный по столбцам список имен столбцов для включения в ограничение UNIQUE.
  • --no-create - Пропускает создание таблицы. Требует --insert.
  • --create-if-not-exists - Создает таблицу, если она не существует, в противном случае продолжает работу. Требуется --insert.
  • --overwrite - Удаляет таблицу, если она уже существует. Требуется --insert. Нельзя использовать с --no-create.
  • --db-schema DB_SCHEMA - Необязательное имя схемы базы данных для создания таблиц.
  • -I, --no-inference - Отключает вывод типа при анализе ввода.
  • --chunk-size CHUNK_SIZE - Размер данных для пакетной вставки в таблицу. Требует --insert.

Утилита sql2csv, запросы к базам данных.

Как можно проверить, что данные были успешно импортированы? Можно использовать интерфейс командной строки sqlite, но также можно использовать утилиту sql2csv:

$ sql2csv --db sqlite:///data.db --query "select * from data"

Обратите внимание, что параметр --query для sql2csv принимает любой запрос SQL. Например, чтобы экспортировать данные, в которых county='LANCASTER' из базы данных sqlite, необходимо выполнить:

$ sql2csv --db sqlite:///data.db --query "select * from data \
> where county='LANCASTER';" > LANCASTER.csv

Параметры CLI утилиты sql2csv:

  • --db CONNECTION_STRING - cтрока подключения к базе данных (как в sqlalchemy).
  • --query QUERY - SQL-запрос для выполнения. Переопределяет FILE и STDIN.
  • -e ENCODING, --encoding ENCODING - кодировка входного файла.
  • -H, --no-header-row - не выводить имена столбцов.

Утилита csvjson: преобразование CSV-данных в JSON.

Очень часто одним из последних шагов в любом анализе данных является размещение данных в Интернете для отображения в виде таблицы, карты или диаграммы. Для этого, чаще всего нужен JSON, и здесь на помощь приходит csvjson. Утилита csvjson берет входной CSV и выводит аккуратно отформатированный JSON. Для иллюстрации воспользуемся csvcut и csvgrep для преобразования небольшого фрагмента данных:

$ csvcut -c county,item_name data.csv | \
> csvgrep -c county -m "GREELEY" |\ 
> csvjson --indent 4
# [
#     {
#         "county": "GREELEY",
#         "item_name": "RIFLE,7.62 MILLIMETER"
#     },
#     {
#         "county": "GREELEY",
#         "item_name": "RIFLE,7.62 MILLIMETER"
#     },
#     {
#         "county": "GREELEY",
#         "item_name": "RIFLE,7.62 MILLIMETER"
#     }
# ]

Дополнительные параметры CLI:

  • -i INDENT, --indent INDENT - отступ в выходном JSON на это количество пробелов. Отключено по умолчанию.
  • -k KEY, --key KEY - выводит JSON как объект, обозначенный заданным столбцом KEY, а не как массив. Все значения столбцов должны быть уникальными. Если указаны --lat и --lon, этот столбец используется в качестве идентификатора объекта GeoJSON.
  • --lat LAT - индекс или имя столбца, содержащие широту. Результатом будет GeoJSON вместо JSON. Требуется --lon.
  • --lon LON - индекс столбца или имя, содержащее долготу. Результатом будет GeoJSON вместо JSON. Требуется --lat.
  • --type TYPE - индекс столбца или имя, содержащее тип GeoJSON. Вывод будет GeoJSON вместо JSON. Требуется --lat и --lon.
  • --geometry GEOMETRY - индекс столбца или имя, содержащее геометрию GeoJSON. Вывод будет GeoJSON вместо JSON. Требуется --lat и --lon.
  • --crs CRS - строка системы отсчета координат, которая будет включена в выходные данные GeoJSON. Требуется --lat и --lon.
  • --no-bbox - отключает вычисление ограничивающей рамки.
  • --stream - вывод JSON в виде потока объектов, разделенных новой строкой, а не в виде массива.
  • -y SNIFF_LIMIT, --snifflimit SNIFF_LIMIT - ограничивает прослушивание диалектов CSV указанным числом байтов. Укажите «0», чтобы отключить сниффинг.
  • -I, --no-inference - отключает определение типа (--locale, --date-format, --datetime-format) при разборе входных данных CSV.

Утилита csvpy: переход к коду.

Для программистов командная строка редко бывает столь же функциональной, как просто написание небольшого куска кода. Утилита csvpy существует только для того, чтобы облегчить жизнь программисту. Его вызов просто запускает интерактивный терминал Python с данными, предварительно загруженными в считыватель CSV:

$ csvpy data.csv
# Welcome! "data.csv" has been loaded in a reader object named "reader".
# >>> print(len(list(reader)))
# 1037
# >>> quit()