Com nodejs, quero analisar um arquivo .csv de 10.000 registros e fazer algumas operações em cada linha. Tentei usar http://www.adaltas.com/projects/node-csv . Eu não conseguia fazer uma pausa em cada linha. Isso apenas lê todos os 10.000 registros. Eu preciso fazer o seguinte:
- ler csv linha por linha
- realizar operação demorada em cada linha
- vá para a próxima linha
Alguém pode sugerir alguma ideia alternativa aqui?
Respostas:
Parece que você precisa usar alguma solução baseada em fluxo, já existiam tais bibliotecas, então antes de se reinventar, experimente esta biblioteca, que também inclui suporte para validação. https://www.npmjs.org/package/fast-csv
fonte
Eu usei desta forma: -
fonte
parse
não está definido. Tem algo que estou perdendo? Quando eu executonpm install csv-parse
e, em seguida, no meu código addvar parse = require("csv-parse");
, então funciona. Tem certeza que o seu funciona? De qualquer forma, adoro esta solução (mesmo que tenha de incluir ocsv-parse
módulocsv-parse
módulo de inclusão .Minha solução atual usa o módulo assíncrono para executar em série:
fonte
csv-parser
vez decsv-parse
usar em algumas das respostas acima.csv-parser
veio cerca de 2 anos depoiscsv-parse
.csv-parser
melhor, pois é fácil lidar com cabeçalhos por meio dele.Instale o csv-parser primeiro:
Suponha que você tenha um arquivo csv como este:
Você pode realizar a operação necessária como:
Para mais informações, consulte
fonte
Para pausar o streaming em csv rápido, você pode fazer o seguinte:
fonte
O projeto node-csv ao qual você está se referindo é completamente suficiente para a tarefa de transformar cada linha de uma grande parte dos dados CSV, a partir dos documentos em: http://csv.adaltas.com/transform/ :
Pela minha experiência, posso dizer que também é uma implementação bastante rápida, tenho trabalhado com ela em conjuntos de dados com quase 10 mil registros e os tempos de processamento estavam em um nível razoável de dezenas de milissegundos para todo o conjunto.
Reinstalando a sugestão de solução baseada em stream de jurka : Node-csv IS stream baseado e segue a API de streaming Node.js.
fonte
O csv rápido módulo npm pode ler dados linha por linha do arquivo csv.
Aqui está um exemplo:
fonte
fromStream()
e seu site de projeto carece de exemplos e documentação.Eu precisava de um leitor csv assíncrono e tentei originalmente a resposta de @Pransh Tiwari, mas não consegui fazê-lo funcionar com
await
eutil.promisify()
. Eventualmente, encontrei node-csvtojson , que faz praticamente o mesmo que csv-parser, mas com promessas. Aqui está um exemplo de uso de csvtojson em ação:fonte
Experimente o plugin npm linha por linha.
fonte
esta é a minha solução para obter o arquivo csv da url externa
fonte
Solução alternativa para fazer esta tarefa com await / async :
fonte
Ok, então há muitas respostas aqui e eu não acho que elas respondam à sua pergunta, que acho que é semelhante à minha.
Você precisa fazer uma operação como entrar em contato com um banco de dados ou uma API de terceiros que levará tempo e será assíncrona. Você não deseja carregar o documento inteiro na memória por ser muito grande ou por outro motivo, portanto, é necessário ler linha por linha para processar.
Eu li os documentos fs e ele pode fazer uma pausa na leitura, mas usar a chamada .on ('data') tornará contínuo o que a maioria dessas respostas usa e causa o problema.
ATUALIZAÇÃO: Sei mais informações sobre Streams do que jamais quis
A melhor maneira de fazer isso é criar um fluxo gravável. Isso irá canalizar os dados csv em seu fluxo gravável, que você pode gerenciar chamadas assíncronas. O pipe irá gerenciar o buffer de volta ao leitor para que você não termine com uso pesado de memória
Versão Simples
Versão da classe
MÉTODO ANTIGO:
PROBLEMA COM legível
Você notará uma
reading
bandeira. Percebi que, por algum motivo, perto do final do arquivo, o .on ('legível') é chamado uma segunda vez em arquivos pequenos e grandes. Não tenho certeza do motivo, mas isso bloqueia um segundo processo de leitura dos mesmos itens de linha.fonte
Eu uso este simples: https://www.npmjs.com/package/csv-parser
Muito simples de usar:
fonte
Eu estava usando,
csv-parse
mas para arquivos maiores estava tendo problemas de desempenho, uma das melhores bibliotecas que encontrei é Papa Parse , documentos são bons, bom suporte, leve, sem dependências.Instalar
papaparse
Uso:
Nota
header: true
é uma opção na configuração, veja a documentação para outras opçõesfonte
fonte
Você pode converter csv para o formato json usando o módulo csv para json e então você pode facilmente usar o arquivo json em seu programa
fonte
npm install csv
Arquivo CSV de amostra Você precisará de um arquivo CSV para analisar, então você já tem um ou pode copiar o texto abaixo e colá-lo em um novo arquivo e chamar esse arquivo de "mycsv.csv"
Amostra de leitura e análise de código do arquivo CSV
Crie um novo arquivo e insira o código a seguir nele. Certifique-se de ler o que está acontecendo nos bastidores.
Inicie seu aplicativo e verifique a funcionalidade Abra um console e digite o seguinte comando:
Node app 1 Node app Você deve ver a seguinte saída em seu console:
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'},] Agora você deve abrir um navegador da web e navegar até o seu servidor. Você deve ver a saída dos dados no formato JSON.
Conclusão Usando node.js e seu módulo CSV, podemos ler e usar dados armazenados no servidor de forma rápida e fácil e disponibilizá-los ao cliente mediante solicitação
fonte