首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Nodejs / Papa Parse解析远程CSV文件?

使用Nodejs / Papa Parse解析远程CSV文件?
EN

Stack Overflow用户
提问于 2017-12-15 06:45:45
回答 5查看 17.1K关注 0票数 12

我目前正在从Node应用程序解析远程csv产品馈送,并希望使用Papa Parse来完成(因为我过去在浏览器中使用它取得了成功)。

Papa Parse Github:

https://github.com/mholt/PapaParse

我最初的尝试和网络搜索并没有确切地发现这是如何做到的。Papa readme说Papa Parse现在与Node兼容,因此Baby Parse (用于提供一些Node解析功能)已经被贬低。

这里有一个文档的Node部分的链接,供将来在这个问题上遇到困难的任何人参考:

https://github.com/mholt/PapaParse#papa-parse-for-node

从文档段落看,Node中的Papa Parse可以解析可读的流,而不是文件。我的问题是;

有没有办法利用可读流功能来使用Papa在Node中下载/解析远程CSV类似于Papa在浏览器中使用XMLHttpRequest来实现相同的目标?

对于未来的可见性

对于那些在该主题上进行搜索(并避免重复类似问题)的人,请尝试使用此处介绍的远程文件解析功能:

http://papaparse.com/docs#remote-files

将在您的控制台中导致以下错误:

“未处理的拒绝ReferenceError:未定义XMLHttpRequest”

我已经在官方存储库上打开了一个问题,并将在了解更多需要解决的问题时更新此问题。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-03-19 04:22:16

实际上,您可以使用

称为scramjet的轻量级流转换库

详细说明:直接从http流解析CSV是我的主要示例之一。它还使用

PapaParse

解析CSV。

上面写的所有代码,以及它们之间的任何转换,都可以在几行代码中完成:

代码语言:javascript
复制
const {StringStream} = require("scramjet");
const request = require("request");

request.get("https://srv.example.com/main.csv")   // fetch csv
    .pipe(new StringStream())                       // pass to stream
    .CSVParse()                                   // parse into objects
    .consume(object => console.log("Row:", object))  // do whatever you like with the objects
    .then(() => console.log("all done"))

在您自己的示例中,您将文件保存到磁盘,即使使用PapaParse,这也不是必需的。

票数 11
EN

Stack Overflow用户

发布于 2018-03-09 22:23:57

好的,我想我有答案了。但我想只有时间能证明这一点。

请注意,我的文件是带有制表符分隔符的.txt。

代码语言:javascript
复制
var fs = require('fs');
var Papa = require('papaparse');
var file = './rawData/myfile.txt';
// When the file is a local file when need to convert to a file Obj.
//  This step may not be necissary when uploading via UI
var content = fs.readFileSync(file, "utf8");

var rows;
Papa.parse(content, {
    header: false,
    delimiter: "\t",
    complete: function(results) {
        //console.log("Finished:", results.data);
    rows = results.data;
    }
});
票数 14
EN

Stack Overflow用户

发布于 2017-12-16 06:56:03

我添加了这个答案(并将随着我的进展更新它),以防其他人还在研究这个问题。

以前的用户似乎都是先下载文件,然后再进行处理。这应该不是必需的,因为Papa Parse应该能够处理读取流,并且应该可以通过管道将'http‘GET发送到该流。

这是一个例子,有人在讨论我正在尝试做什么,然后退回到下载文件,然后解析它:

https://forums.meteor.com/t/processing-large-csvs-in-meteor-js-with-papaparse/32705/4

注意:在上面讨论了Baby Parse,现在Papa Parse与Node Baby Parse一起工作,Baby Parse已经折旧。

下载文件解决方法

虽然下载然后用Papa Parse解析并不能回答我的问题,但这是我目前唯一的变通办法,其他人可能想要使用这种方法。

我下载并解析的代码目前看起来像这样:

代码语言:javascript
复制
// Papa Parse for parsing CSV Files
var Papa = require('papaparse');
// HTTP and FS to enable Papa parse to download remote CSVs via node streams.
var http = require('http');
var fs = require('fs');

var destinationFile = "yourdestination.csv";

var download = function(url, dest, cb) {
  var file = fs.createWriteStream(dest);
  var request = http.get(url, function(response) {
    response.pipe(file);
    file.on('finish', function() {
      file.close(cb);  // close() is async, call cb after close completes.
    });
  }).on('error', function(err) { // Handle errors
    fs.unlink(dest); // Delete the file async. (But we don't check the result)
    if (cb) cb(err.message);
  });
};

download(feedURL, destinationFile, parseMe);

var parseMe = Papa.parse(destinationFile, {
  header: true,
  dynamicTyping: true,
  step: function(row) {
    console.log("Row:", row.data);
  },
  complete: function() {
    console.log("All done!");
  }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47823288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档