Версия:

Модуль csv

Модуль csv

Общие сведения

Модуль csv обрабатывает записи, форматированные в соответствии с правилами CSV (значения, разделенные запятыми).

По умолчанию, используются следующие правила форматирования:

  • Escape-последовательности escape sequences в Lua, такие как \n или \10, можно использовать в строках, но не в файлах,
  • Запятые обозначают конец поля,
  • Символы перевода строки или перевода строки плюс возврата каретки означают конец записи,
  • Начальные и конечные пробелы игнорируются,
  • Кавычками могут обрамляться поля или компоненты полей,
  • При обрамлении кавычками запятые, символы перевода строки и пробелы считаются обычными символами, а двойные кавычки «» считаются одинарными.

Возможные параметры, передаваемые в функции модуля 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 не указываются.

Параметры:
  • readable (object) – строка или любой объект с методом read(), форматированный по правилам CSV
  • options (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:
  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().

Параметры:
  • csv-table (table) – таблица, которую можно форматировать в соответствии с правилами CSV
  • options (table) – необязательно. См. выше
  • writable (object) – любой объект с методом write()
возвращается:

записанное значение

тип возвращаемого значения:
 

строка, которая записывается в объект 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 мегабайт и более).

Параметры:
  • csv-table (table) – таблица, которую можно форматировать в соответствии с правилами CSV
  • options (table) – см. выше
возвращается:

Lua-функция с итератором

тип возвращаемого значения:
 

функция с итератором

Пример:

csv.iterate() – это csv.load() и csv.dump() низкого уровня. Чтобы это доказать, используем функцию, которая совпадает с функцией csv.load(), как можно увидеть в исходном коде Tarantool’а (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
  ...