当前位置: 首页 > 知识库问答 >
问题:

将大型csv文件从NodeJS发送到python

陈斌蔚
2023-03-14

我需要将大型csv文件从node发送到Python。这段代码适用于小文件,但不适用于大文件。我也试过产卵过程。我不明白问题出在哪里。如果有人知道正确的代码,请分享

代码:

const express=require('express')
const app=express()    
let p = require('python-shell');
const fs = require('fs');
let filledarray=[]

fs.createReadStream('data.csv')

.pipe(csv())

.on('data', (row) => {



filledarray.push(row)

})

.on('end', () => {

   console.log('CSV file successfully processed');

});

app.get('/send',(req,res)=>{



  var options = {
       args:
       [
           JSON.stringify(filledarray)
       ]
  }
  p.PythonShell.run('hello.py', options, function  (err, results)  {

         if(err) {
           console.error(err)
         }
         else{
            console.log(results)
            res.send(results)
         }

  });

})

app.listen('5000')

错误

 Error: spawn ENAMETOOLONG at ChildProcess.spawn (internal/child_process.js:394:11) at Object.spawn 
 (child_process.js:535:9)

共有1个答案

石喜
2023-03-14

您将大量数据作为参数发送到脚本hello.py中,这就是获得Enametoolong的原因。

您需要更改Python脚本以从stdin接收数据,并使用pyshell.send(data);

let pyshell = new PythonShell('hello.py', { mode: 'text' });

// sends a message to the Python script via stdin
pyshell.send('hello');

您可以使用以下3种模式之一:

  • 使用文本模式交换文本行
  • 使用json模式交换json片段
  • 对其他任何内容使用二进制模式(数据按原样发送和接收)

在您的特定情况下,可以使用json并单独发送每一行。然后,在您的python脚本中,您可以使用以下摘自python-shell示例的内容。

我不认识什么蟒蛇

import sys, json

# simple JSON echo script
for line in sys.stdin:
  print(json.dumps(json.loads(line)))
let pyshell = new PythonShell('hello.py', { mode: 'json' });

fs.createReadStream('data.csv')
.pipe(csv())
.on('data', (row) => {
   pyshell.send(row);
})

 类似资料:
  • 我将pdf文档存储在服务器端的文件系统中。 我需要让用户下载其中一个,当他/她点击下载。 问题是我知道如何将文件从NodeJS发送到浏览器,但这里的请求将由ReactJS axios请求发出。因此,当我发送文件时,响应将转到react。如何将该pdf文件发送给用户?我是否使用前端代码直接访问文件系统? 在NodeJS中执行之后,当我记录响应时,我在浏览器控制台中获得以下信息 我如何处理这个问题,以

  • 问题内容: 我需要构建一个函数来处理大型CSV文件,以便在bluebird.map()调用中使用。考虑到文件的潜在大小,我想使用流媒体。 此函数应接受一个流(一个CSV文件)和一个函数(处理该流中的块),并在读取文件到末尾(已解决)或错误(已拒绝)时返回promise。 所以,我开始: 现在,我有两个相互关联的问题: 我需要限制正在处理的实际数据量,以免造成内存压力。 作为参数传递的函数通常将是异

  • 我正在尝试将CSV发送到Firebase云存储中,但不是从用户从他们的文件资源管理器中手动选择文件。相反,点击一个按钮,就会用JavaScript创建一个CSV文件,这就是我想要上传到云存储的内容。 代码片段显示了我是如何创建文件的 乔治

  • 我试图从Firefox中的新MediaRecorderAPI发送一个Blob到NodeJS以将其存储在文件中。Blob包含转换为webm-file的记录。我在发送之前将这个Blob分成一定的大小,以便能够通过webrtc数据通道提供的带宽发送它。这个看起来像这样: 在nodeJS方面,我试图将数据转换回webm文件,就像这样: 它告诉我,块被写入,但是文件是空的。我尝试了从blob派生的bas64

  • 我尝试创建一个redux-react应用程序,在该应用程序中,用户可以导入一个CSV文件,然后将其存储在数据库中。现在,我在前端工作,我想在那里创建一个代码,用户可以选择一个csv文件,从他们的计算机,他们想下载,然后文件发送到后端。我已经使用csvReader读取CSV文件,但我不知道如何将数据发送到后端。我在后端使用nestJS。我想一次发送整个CSV文件,但我不知道如何解决这个问题。我是初学

  • 我正在尝试使用Vertx上传一个文件,该请求是一个包含PDF的POST请求,我的处理程序如下所示(我从github中的一个示例中获取了代码): 根据上面的评论,我不能只尝试这样的事情(它实际上显示了一个错误): 我一直在检查MessageCodec,但我不清楚如何将其应用于这种情况。 注意:此escenario必须使用eventbus。