Модуль csv
Модуль csv обрабатывает записи, форматированные в соответствии с
правилами CSV (значения, разделенные запятыми).
По умолчанию, используются следующие правила форматирования:
- Lua escape-последовательности, такие как \n или \10, допустимы внутри строк, но не внутри файлов,
- запятые обозначают конец поля,
- переводы строк или переводы строк плюс возвраты каретки обозначают конец записи,
- начальные и конечные пробелы игнорируются,
- кавычки могут окружать поля или части полей,
- если поле окружено кавычками, запятые, переводы строк и пробелы считаются обычными символами, а пара кавычек "" считается одной кавычкой.
Параметры, которые можно передать в функции модуля csv:
delimiter = {string}(по умолчанию: запятая) – однобайтовый символ, обозначающий конец поляquote_char = {string}(по умолчанию: кавычка) – однобайтовый символ, обозначающий ограничитель строкиchunk_size = {number}(по умолчанию: 4096) – количество символов, читаемых за один раз (обычно для эффективности файлового ввода-вывода)skip_head_lines = {number}(по умолчанию: 0) – количество строк, которые пропускаются в начале (обычно для заголовка)
Ниже приведен перечень всех функций модуля csv.
Имя | Назначение |
|---|---|
Загрузка CSV-файла | |
Преобразование входного значения в строку в формате CSV | |
Итерация по записям CSV |
Получение входного значения в формате CSV
из readable и возврат таблицы в качестве выходного значения. Обычно
readable представляет собой либо строку, либо открытый для чтения
файл. Как правило, параметры {options}
не указываются.
Параметры:
readable(object) — строка или любой объект с методомread(), отформатированный по правилам CSVoptions(table) — см. выше
Возвращает
загруженное значение
Тип возвращаемого значения
table
Пример:
В читаемой строке 3 поля, поле №2 содержит запятую и пробел, поэтому следует использовать кавычки:
tarantool> csv = require('csv')---...tarantool> csv.load('a,"b,c ",d')---- - - a- 'b,c '- d...
В читаемой строке 2-байтный символ = Палочка в кириллице: (Отобразит палочку только в том случае, если кодировка = UTF-8.)
tarantool> csv.load('a\211\128b')---- - - a\211\128b...
Точка с запятой вместо запятой в виде символа разделителя:
tarantool> csv.load('a,b;c,d', {delimiter = ';'})---- - - a,b- c,d...
Читаемый файл ./file.csv содержит
две записи в формате CSV. Объяснение блока fio дается в разделе
fio. Исходный CSV-файл и пример соответственно:
tarantool> -- входное значение в файле file.csv:> -- a,"b,c ",d> -- a\211\128btarantool> fio = require('fio')---...tarantool> f = fio.open('./file.csv', {'O_RDONLY'})---...tarantool> csv.load(f, {chunk_size = 4096})---- - - a- 'b,c '- d- - a\211\128b...tarantool> f:close()---- true...
Получение входного значения из
таблицы csv-table и возврат строки в формате CSV в качестве выходного
значения. Или получение входного значения из таблицы csv-table и
размещение выходного значения в writable. Обычно параметры
{options} не указываются. Как правило,
если указан writable, то это открытый для чтения файл.
csv.dump() – это операция, обратная
csv.load().
Параметры:
csv-table(table) — таблица, которую можно отформатировать по правилам CSVoptions(table) — необязательный параметр. См. вышеwritable(object) — любой объект с методомwrite()
Возвращает
выгруженное значение, которое записывается в writable, если он
указан
Тип возвращаемого значения
string
Пример:
В таблице формата CSV 3 поля, поле №2 содержит "," поэтому результат включает в себя кавычки
tarantool> csv = require('csv')---...tarantool> csv.dump({'a','b,c ','d'})---- 'a,"b,c ",d'...
Круговое преобразование: из строки в таблицу и обратно в строку
tarantool> csv_table = csv.load('a,b,c')---...tarantool> csv.dump(csv_table)---- 'a,b,c'...
Создание Lua-функции с итератором для прохода по записям в формате CSV по одному полю за раз. Настоятельно рекомендуется использовать итератор для большого объема данных (10 мегабайт и более).
Параметры:
input(object) — входное значение: строка, объект с методомread()или таблицаoptions(table) — см. выше
Возвращает
Lua-функция с итератором
Тип возвращаемого значения
function
Пример:
csv.iterate() — низкоуровневая функция для csv.load() и csv.dump(). Чтобы это показать, ниже приведена функция, которая работает так же, как csv.load(), — см. исходный код Tarantool.
tarantool> load = function(readable, opts)> opts = opts or {}> local result = {}> for i, tup in csv.iterate(readable, opts) do> result[i] = tup> end> return result> end---...tarantool> load('a,b,c')---- - - a- b- c...