如何使用Nodejs将数据作为文件夹中的文件名写入CSV文件

Posted

技术标签:

【中文标题】如何使用Nodejs将数据作为文件夹中的文件名写入CSV文件【英文标题】:How to write a data as file names in a folder to CSV file using Nodejs 【发布时间】:2020-12-03 15:52:27 【问题描述】:

Anty body 确实使用 javascript 将文件夹中的文件名写入 CSV 文件

我的文件夹结构是

Data
 +IMG
    +test
       -1.png
       -2.png
    +train
       -3.png
       -4.png

输出的 CSV 文件会是这样的

Data/IMG/test/1.png     Data/IMG/train/3.png
Data/IMG/test/2.png     Data/IMG/train/4.png

【问题讨论】:

【参考方案1】:

您只需要遍历所有文件夹并找到所有文件。 您可以参考this answer 进行操作。

当您找到所有文件的路径时,您可以将这些路径写入 csv 文件的字符串中:

const fs = require('fs');
const path = require('path');

let csvStr = "";

async function loop(startPath) 
    // Our starting point
    try 
        // Get the files as an array
        const files = await fs.promises.readdir(startPath);

        // Loop them all with the new for...of
        for (const file of files) 
            // Get the full paths
            const currentPath = path.join(startPath, file);

            // Stat the file to see if we have a file or dir
            const stat = await fs.promises.stat(currentPath);

            if (stat.isFile()) 
                console.log("'%s' is a file.", currentPath);
                // put the file into csv string
                csvStr += currentPath + ", "
             else if (stat.isDirectory()) 
                console.log("'%s' is a directory.", currentPath);
                // enter the dictionary and loop
                await loop(currentPath);
            

         // End for...of
     catch (e) 
        // Catch anything bad that happens
        console.error("We've thrown! Whoops!", e);
    



// Make an async function that gets executed immediately
(async () => 
    // start loop from the path where you run node
    await loop("./");

    fs.writeFileSync("your.csv", csvStr);
)();

【讨论】:

感谢您的回复我是js新手,您能解释一下或制作代码吗??? fromPath 是内部循环,是文件夹中的当前位置,应该是文件路径或字典路径。您想查找所有文件,因此我们只需要文件的路径。我们可以为 CSV 收集文件路径的名称,所以我添加了csvStr += fromPath + ", ", 用于 CSV 分隔符。 你能提供一个完整的代码兄弟吗?我尝试过但没有成功 CSV(逗号分隔值)文件中总是有逗号,所以我无法理解您给定的示例输出(没有逗号)。或者,我猜你只是想让test 成为一个列,而train 成为另一个?我认为这并不难,因为您已经知道如何获取所有文件名。你需要做的是添加一些if else,你想自己试试吗?

以上是关于如何使用Nodejs将数据作为文件夹中的文件名写入CSV文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将文件写入 NodeJS 中的特定目录?

Nodejs Parse Json 文件将输入转换为 JSON 数组写入文件

nodejs分析excel文件将结果写入excel文件

nodejs

无法使用 NodeJS 中的 Pino 记录器将日志写入文件

如何在从 NodeJS 中的多个输入流中读取时写入单个文件