node.js 如何在节点js中读取csv文件

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/41776978/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-02 17:56:29  来源:igfitidea点击:

How to read csv file in node js

node.jscsvexpressmeanjsfs

提问by MMR

I am trying to read a csv file using node js. Her is my code

我正在尝试使用节点 js 读取 csv 文件。她是我的代码

fs.readFile(config.csvUploadPath, function read(err, data) {
    if (err) {
        throw err;
    }
    console.log(data + 'my data')
});

CONSOLE:

安慰:

ID
D11
D33
D55

Here I want to get the elements in the column ID and store those in an array. How can I do that? Can anyone suggest me help. Thanks. My controller:

这里我想获取列 ID 中的元素并将它们存储在一个数组中。我怎样才能做到这一点?任何人都可以建议我帮忙。谢谢。我的控制器:

var partnersModel = new partners(params);
        fs.readFile(config.csvUploadPath, function read(err, data) {
            if (err) {
                throw err;
            }
        dataArray = data.toString().split(/\r?\n/);
            dataArray.forEach(function(v,i){
                if(v !== 'DUI'){
                  partnersModel.dui.push(v);
                }
            });
        });
        partnersModel.save(function(error, response){

回答by trognanders

Use a library, CSV has lots of gotchas. I have come to enjoy the package csv. It is located here: https://www.npmjs.com/package/csv. Here is a very quick example using the async api.

使用图书馆,CSV 有很多问题。我是来享受包裹的csv。它位于:https: //www.npmjs.com/package/csv。这是一个使用异步 api 的非常快速的示例。

const fs = require('fs')
var parse = require('csv-parse')
fs.readFile(inputPath, function (err, fileData) {
  parse(fileData, {columns: false, trim: true}, function(err, rows) {
    // Your CSV data is in an array of arrys passed to this callback as rows.
  })
})

Since your file does not have multiple values per row and contains no delimiters besides newline, it is only trivially CSV. Maybe String.prototype.split()is for you?

由于您的文件每行没有多个值,并且除换行符外不包含任何分隔符,因此它只是简单的 CSV。也许String.prototype.split()是给你的?

const fs = require('fs')
fs.readFile(inputPath, 'utf8', function (err, data) {
  var dataArray = data.split(/\r?\n/);  //Be careful if you are in a \r\n world...
  // Your array contains ['ID', 'D11', ... ]
})

回答by zelusp

From How to read data From *.CSV file using javascript?, use the jQuery-CSV library.

如何使用 javascript 从 *.CSV 文件读取数据?,使用 jQuery-CSV 库。

Note: The library is designed to handle any CSV data that is RFC 4180 compliant, including all of the nasty edge cases that most 'simple' solutions overlook.

注意:该库旨在处理符合 RFC 4180 的任何 CSV 数据,包括大多数“简单”解决方案忽略的所有令人讨厌的边缘情况。

var fs = require('fs');
var $ = jQuery = require('jquery');
$.csv = require('jquery-csv');

var sample = './path/to/data/sample.csv';
fs.readFile(sample, 'UTF-8', function(err, csv) {
  $.csv.toArrays(csv, {}, function(err, data) {
    for(var i=0, len=data.length; i<len; i++) {
      console.log(data[i]); //Will print every csv line as a newline
    }
  });
});

code snippet from jquery-csv's examples here.

来自此处jquery-csv示例的代码片段。

回答by ehacinom

I used a stream, fs, and csv-parselike in this answer:

我在这个答案中使用了一个流,fscsv-parse一样:

const parse = require('csv-parse')
const fs = require('fs') 

const data = []
fs.createReadStream(filename)
  .pipe(parse({ delimiter: ',' }))
  .on('data', (r) => {
    console.log(r);
    data.push(r);        
  })
  .on('end', () => {
    console.log(data);
  })