TensorFlow.js加载本地CSV报路径无效ENOENT错误该如何解决?
报错原因
tf.data.csv()的file://协议在Node.js环境下不支持直接使用./开头的相对路径,相对路径解析基准不是当前JS文件所在目录,而是Node进程启动的工作目录,极易出现路径匹配错误- 路径字符串格式不符合tfjs-node的文件读取规则,触发文件不存在的ENOENT报错
解决方法
方案1(最稳妥,推荐):使用Node内置path模块拼接绝对路径
修改代码如下,通过__dirname(当前JS文件所在目录的绝对路径)拼接目标CSV文件的路径,完全规避相对路径的匹配问题:
const tf = require('@tensorflow/tfjs') require('@tensorflow/tfjs-node') // 引入Node.js内置path模块 const path = require('path') async function test_function() { // 拼接得到CSV文件的绝对路径 const csvAbsolutePath = `file://${path.resolve(__dirname, './datasets/kc_house_data.csv')}` const house_sales_dataset = tf.data.csv(csvAbsolutePath); const sample = house_sales_dataset.take(10); try { const dataArray = await sample.toArray(); console.log('读取成功,样本数据:', dataArray) } catch(err) { console.log(err) } } test_function();
方案2(仅适用于固定从项目根目录启动的场景)
如果你每次都是直接在tensorflow-practice根目录下执行node app.js启动项目,可以直接简化路径写法,去掉路径里的./:
const house_sales_dataset = tf.data.csv('file://datasets/kc_house_data.csv');
可选排查项
如果修改路径后仍报错,可以检查以下内容:
- 确认
datasets文件夹下的kc_house_data.csv文件名拼写完全正确,没有大小写、多余后缀的问题(比如Windows系统隐藏后缀的情况下出现kc_house_data.csv.txt的错误命名) - 执行
npm i @tensorflow/tfjs-node重新安装依赖,排除依赖安装异常导致的路径报错
内容的提问来源于stack exchange,提问作者nickcoding2
相关产品推荐
相关产品推荐

