我正在尝试导入&使用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
答案 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列表。代码在此处显示的顺序是它应该如何显示在您创建的脚本中。