С помощью nodejs я хочу проанализировать файл .csv из 10000 записей и выполнить некоторые операции с каждой строкой. Я пробовал использовать http://www.adaltas.com/projects/node-csv . Я не мог заставить это останавливаться на каждой строке. Он просто читает все 10000 записей. Мне нужно сделать следующее:
- читать csv построчно
- выполнять трудоемкую операцию на каждой линии
- перейти к следующей строке
Может ли кто-нибудь предложить здесь какие-либо альтернативные идеи?
Ответы:
Похоже, вам нужно использовать какое-то решение на основе потоков, такие библиотеки уже существуют, поэтому, прежде чем изобретать себя заново, попробуйте эту библиотеку, которая также включает поддержку проверки. https://www.npmjs.org/package/fast-csv
источник
Я использовал такой способ: -
источник
parse
не определяется. Что-то мне не хватает? Когда я запускаю,npm install csv-parse
а затем добавляю свой кодvar parse = require("csv-parse");
, он работает. Вы уверены, что ваш работает? В любом случае, мне нравится это решение (даже если мне придется включитьcsv-parse
модуль,csv-parse
модуль include .В моем текущем решении используется модуль async для последовательного выполнения:
источник
csv-parser
вместо того, чтобыcsv-parse
использоваться в некоторых из приведенных выше ответов.csv-parser
пришло примерно через 2 года после этогоcsv-parse
.csv-parser
лучше, так как с его помощью легко обрабатывать заголовки.Сначала установите csv-parser:
Предположим, у вас есть такой CSV-файл:
Вы можете выполнить требуемую операцию как:
Для дальнейшего чтения см.
источник
Чтобы приостановить потоковую передачу в fast-csv, вы можете сделать следующее:
источник
Проект node-csv, на который вы ссылаетесь, полностью достаточен для задачи преобразования каждой строки большой части данных CSV из документации по адресу: http://csv.adaltas.com/transform/ :
По своему опыту могу сказать, что это также довольно быстрая реализация, я работал с ней на наборах данных, содержащих около 10 тыс. Записей, и время обработки было на разумном уровне в десятки миллисекунд для всего набора.
Предложение решения jurka на основе потоков: node-csv IS-поток основан на потоковом API Node.js.
источник
Модуль npm fast-csv может считывать данные построчно из файла csv.
Вот пример:
источник
fromStream()
а на сайте проекта отсутствуют примеры и документация.Мне нужен был асинхронный csv-ридер, и изначально я попробовал ответить @Pransh Tiwari, но не смог заставить его работать с
await
иutil.promisify()
. В конце концов я наткнулся на node-csvtojson , который в значительной степени делает то же самое, что и csv-parser, но с обещаниями. Вот пример использования csvtojson в действии:источник
Попробуйте построчно плагин npm.
источник
это мое решение получить файл csv с внешнего URL
источник
Обходной путь для выполнения этой задачи с помощью await / async :
источник
Хорошо, здесь есть много ответов, и я не думаю, что они ответят на ваш вопрос, который, как мне кажется, похож на мой.
Вам нужно выполнить операцию, например, связаться с базой данных или сторонним API, которая потребует времени и является асинхронной. Вы не хотите загружать весь документ в память из-за слишком большого размера или по какой-либо другой причине, поэтому вам нужно читать строку за строкой для обработки.
Я прочитал документы fs, и он может приостановить чтение, но использование вызова .on ('data') сделает его непрерывным, который используется большинством из этих ответов и вызывает проблему.
ОБНОВЛЕНИЕ: я знаю больше информации о потоках, чем когда-либо хотел
Лучший способ сделать это - создать поток с возможностью записи. Это направит данные CSV в ваш записываемый поток, которым вы можете управлять вызовами asyncronus. Канал будет управлять буфером на всем пути обратно к считывателю, поэтому вы не столкнетесь с интенсивным использованием памяти
Простая версия
Версия класса
СТАРЫЙ МЕТОД:
ПРОБЛЕМА С читаемым
Вы заметите
reading
флаг. Я заметил, что по какой-то причине прямо в конце файла .on ('readable') вызывается второй раз для маленьких и больших файлов. Я не уверен, почему, но это блокирует это от второго процесса, читающего те же строки.источник
Я использую этот простой: https://www.npmjs.com/package/csv-parser
Очень просто использовать:
источник
Я использовал,
csv-parse
но для больших файлов возникали проблемы с производительностью, одна из лучших библиотек, которые я нашел, - это Papa Parse , документы хороши, хорошая поддержка, легкий вес, никаких зависимостей.устанавливать
papaparse
Использование:
Примечание
header: true
- это параметр в конфигурации, другие параметры см. В документации.источник
источник
Вы можете преобразовать csv в формат json с помощью модуля csv-to-json, а затем вы можете легко использовать файл json в своей программе.
источник
npm установить csv
Пример файла CSV. Для синтаксического анализа вам понадобится файл CSV, так что либо он у вас уже есть, либо вы можете скопировать приведенный ниже текст и вставить его в новый файл и назвать этот файл mycsv.csv
Пример кода для чтения и анализа CSV-файла
Создайте новый файл и вставьте в него следующий код. Обязательно прочитайте, что происходит за кулисами.
Запустите приложение и проверьте работоспособность Откройте консоль и введите следующую команду:
Node app 1 Node app Вы должны увидеть в консоли следующий вывод:
1 [MYCSV {Fieldone: 'ABC', Fieldtwo: '123', Fieldthree: 'Fudge'}, 2 MYCSV {Fieldone: '532', Fieldtwo: 'CWE', Fieldthree: 'ICECREAM'}, 3 MYCSV {Fieldone: '8023', Fieldtwo: 'POOP', Fieldthree: 'DOGS'}, 4 MYCSV {Fieldone: '441', Fieldtwo: 'CHEESE', Fieldthree: 'CARMEL'}, 5 MYCSV {Fieldone: '221', Fieldtwo: 'ABC', Fieldthree: 'HOUSE'},] Теперь вы должны открыть веб-браузер и перейти на свой сервер. Вы должны увидеть, что он выводит данные в формате JSON.
Заключение Используя node.js и его модуль CSV, мы можем быстро и легко прочитать и использовать данные, хранящиеся на сервере, и сделать их доступными для клиента по запросу.
источник