如何解决如何从目录中使用node.js读取多个csv文件?
我想从目录中读取多个CSV文件并将其存储在数据库中。我尝试了很多,还发现此代码可以读取文件。显然,它只是扫描名称而不会返回实际文件。任何人都可以在此代码中进行一些调整并给我一个解决方案吗?
const fs = require('fs');
//joining path of directory
const directoryPath = path.join(__dirname,'Documents');
//passsing directoryPath and callback function
fs.readdir(directoryPath,function (err,files) {
//handling error
if (err) {
return console.log('Unable to scan directory: ' + err);
}
//listing all files using forEach
files.forEach(function (file) {
// Do whatever you want to do with the file
console.log(file);
});
});```
解决方法
要读取文件内容,您需要使用fs.readFile
,因此,我在互联网上浏览了好几天,但没有得到满意的答案。因此,以为我会混合阅读单个文件概念,然后将其合并到多个文件中。这是我的操作方式:
让我们假设有一个名为csvFiles的目录,并且我们想读取其中的所有CSV文件。
首先,安装并需要所有依赖项。
var fs = require('fs');
const path = require('path');
const mysqlConnection = require('./connection');
const fastcsv = require('fast-csv');
然后创建一个函数,该函数返回带有文件名的Promise。
//Hard coded directory has been used.
//Put your path here...
const currDir = path.join(__dirname + '/../csvfiles/');
// Function to get the filenames present
// in the directory
const readdir = (dirname) => {
return new Promise((resolve,reject) => {
fs.readdir(dirname,(error,filenames) => {
if (error) {
reject(error);
} else {
resolve(filenames);
}
});
});
};
制作CSV过滤器以过滤出目录中存在的CSV文件。
//CSV filter to filter out the csv files
//in the directory
const filtercsvFiles = (filename) => {
return filename.split('.')[1] == 'csv';
};
然后读取所有文件,并将它们存储在数组中。开始解析for循环内的所有文件,并将其保存在mysql中。
readdir(currDir).then((filenames) => {
filenames = filenames.filter(filtercsvFiles);
for (let i = 0; i < filenames.length; i++) {
let currFilePath = currDir + filenames[i];
//Use fast-csv to parse the files
let csvData = [];
fastcsv
.parseFile(currFilePath)
.on('data',(data) => {
csvData.push(data);
})
.on('end',() => {
csvData.shift();
//Save the data in mysql
query =
'insert ignore into csvData (id,name,date,steps,calories) values ?';
mysqlConnection.query(query,[csvData],(err,response) => {
console.log(err || response);
});
});
}
});
这就是您读取目录中存在的任意数量的CSV文件的方式。 不客气:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。