Node.js导入带有空白字段的csv

时间:2015-01-20 01:27:05

标签: node.js csv require

我正在尝试导入&使用csv-parse包解析CSV文件,但首先遇到require csv文件有困难。

当我做input = require('../../path-to-my-csv-file')

由于连续逗号我收到错误,因为某些字段为空:

e","17110","CTSZ16","Slitzer™ 16pc Cutlery Set in Wood Block",,"Spice up
                                                                    ^
SyntaxError: Unexpected token ,

如何将CSV文件导入节点环境?

包示例为Here

1 个答案:

答案 0 :(得分:4)

要解决您的第一个问题,请使用空条目读取CSV:

使用'fast-csv'节点包。它将使用emtpy条目解析csv。

要回答第二个问题,如何将CSV导入节点:

您实际上并未将csv文件“导入”到节点中。你应该fs.open文件 或使用fs.createReadStream在适当的位置读取csv文件。

下面是一个脚本,它使用fs.createReadStream来解析一个名为“test.csv”的CSV,它是运行它的脚本中的一个目录。

第一部分设置我们的程序,使得对象的基本声明用于存储我们的解析列表。

var csv = require('fast-csv') // require fast-csv module
var fs = require('fs') // require the fs, filesystem module
var uniqueindex = 0 // just an index for our array
var dataJSON = {} // our JSON object, (make it an array if you wish)

下一节将声明一个流,它会拦截从我们的CSV文件中读取的数据并对其执行操作。在这种情况下,我们拦截数据并将其存储在JSON对象中,然后在流完成后保存该JSON对象。它基本上是一个截取数据的过滤器,可以用它做它想做的事情。

var csvStream = csv() // - uses the fast-csv module to create a csv parser
.on('data',function(data){ // - when we get data perform function(data) 
  dataJSON[uniqueindex] = data; // - store our data in a JSON object dataJSON
  uniqueindex++ // - the index of the data item in our array
})
.on('end', function(){ // - when the data stream ends perform function()
  console.log(dataJSON) // - log our whole object on console
  fs.writeFile('../test.json', // - use fs module to write a file
  JSON.stringify(dataJSON,null,4), // - turn our JSON object into string that can be written
  function(err){ // function(err) only gets performed once were done saving the file and err will be nil if there is no error
    if(err)throw err //if there's an error while saving file throw it
    console.log('data saved as JSON yay!')
  })
})

本节从csv文件创建所谓的“readStream”。该文件的路径是相对的。流只是一种读取文件的方式。它非常强大,因为来自流的数据可以通过管道传输到另一个流中。 因此,我们将创建一个从CSV文件中读取数据的流,然后将其很好地导入到第2节中预定义的读取流/过滤器中。

var stream = fs.createReadStream('../test.csv')
stream.pipe(csvStream)

这将在我们的csv解析脚本所在的位置创建一个名为'test.json'的文件。 test.json将在JSON对象中包含已解析的CSV列表。代码在此处显示的顺序是它应该如何显示在您创建的脚本中。