Модуль csv
Модуль csv
обрабатывает записи, форматированные в соответствии с правилами CSV (значения, разделенные запятыми).
По умолчанию, используются следующие правила форматирования:
- Lua escape sequences such as \n or \10 are legal within strings but not within files,
- Запятые обозначают конец поля,
- Символы перевода строки или перевода строки плюс возврата каретки означают конец записи,
- Начальные и конечные пробелы игнорируются,
- Кавычками могут обрамляться поля или компоненты полей,
- При обрамлении кавычками запятые, символы перевода строки и пробелы считаются обычными символами, а двойные кавычки «» считаются одинарными.
Параметры, которые можно передать в функции модуля csv
:
delimiter = строка
(по умолчанию: запятая) – однобайтовый символ для обозначения конца поляquote_char = строка
(по умолчанию: кавычка) – однобайтовый символ для обозначения закрытия строкиchunk_size = число
(по умолчанию: 4096) – число символов для одновременного чтения (обычно для эффективности файлового ввода-вывода)skip_head_lines = число
(по умолчанию: 0) – число строк, которые пропускаются в начале (обычно для заголовка)
Ниже приведен перечень всех функций модуля csv
.
Имя | Назначение |
---|---|
csv.load() | Загрузка CSV-файла |
csv.dump() | Преобразование входного значения в строку формата CSV |
csv.iterate() | Итерация по записям в формате CSV |
-
csv.
load
(readable[, {options}])¶ Получение входного значения в формате CSV из
readable
и возврат таблицы в качестве выходного значения. Обычноreadable
представляет собой либо строку, либо открытый для чтения файл. Как правило, параметрыoptions
не указываются.Параметры: возвращает: загруженное значение
тип возвращаемого значения: таблица
Пример:
В читаемой строке 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: tarantool> -- a,"b,c ",d tarantool> -- a\\211\\128b tarantool> 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.
dump
(csv-table[, options, writable])¶ Получение входного значения из таблицы
csv-table
и возврат строки в формате CSV в качестве выходного значения. Или получение входного значения из таблицыcsv-table
и размещение выходного значения вwritable
. Обычно параметрыoptions
не указываются. Как правило, если указанwritable
, то это открытый для чтения файл. csv.dump() – это операция, обратная csv.load().Параметры: возвращает: записанное значение
тип возвращаемого значения: строка, которая записывается в объект
writable
, если указанПример:
В таблице формата 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 ' ...
-
csv.
iterate
(input, {options})¶ Создание Lua-функции с итератором для прохода по записям в формате CSV по одному полю за раз. Настоятельно рекомендуется использовать итератор для большого объема данных (10 мегабайт и более).
Параметры: возвращает: Lua-функция с итератором
тип возвращаемого значения: функция с итератором
Пример:
csv.iterate() is the low level of csv.load() and csv.dump(). To illustrate that, here is a function which is the same as the csv.load() function, as seen in the Tarantool source code.
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 ...