我目前正在解析一个节点应用程序的远程csv产品提要,并希望使用Papa Parse来完成此任务(因为我过去在浏览器中成功地使用了它)。
吉土伯爸爸:https://github.com/mholt/PapaParse
我最初的尝试和网络搜索还没有找到确切的方法。Papa自述文件说Papa Parse现在与Node兼容,因此Baby Parse(曾经提供一些Node解析功能)已经贬值。
这里有一个指向文档节点部分的链接,供将来遇到此问题的任何人使用:https://github.com/mholt/PapaParse#papa-parse-for-node
从这个文档段落来看,节点中的Papa Parse似乎可以解析一个可读的流,而不是一个文件。
是否有任何方法可以利用Readable Streams功能来使用Papa在Node中下载/解析远程CSV,这与浏览器中的Papa使用XMLHttpRequest来实现相同目标的方式类似?
为了将来的可见性对于那些搜索该主题(并避免重复类似问题)并尝试利用此处描述的远程文件解析功能的用户:http://papaparse.com/docs#remote-files将导致您的控制台出现以下错误:
“未处理的拒绝引用错误:未定义XMLHttpRequest”
我已经在官方知识库上打开了一个问题,当我了解到更多需要解决的问题时,我会更新这个问题。
7条答案
按热度按时间gajydyqb1#
经过大量的修改,我终于得到了一个使用异步流的工作示例,它不需要额外的库(除了fs/request),可以用于远程和本地文件。
我需要创建一个数据流,以及一个PapaParse流(使用
papa.NODE_STREAM_INPUT
作为papa.parse()
的第一个参数),然后将数据通过管道传输到PapaParse流中。需要为PapaParse流上的data
和finish
事件实现事件侦听器。然后,您可以在finish
事件的处理程序中使用解析后的数据。参见以下示例:
parseStream的
data
事件碰巧为CSV中的每一行运行一次(尽管我不确定这种行为是否得到保证)。dataStream
将使用fs
创建:(You可能需要使用
path.join
和__dirname
指定相对于文件所在位置的路径,而不是相对于文件运行位置的路径)kfgdxczn2#
好的,我想我有答案了。但是我想只有时间能证明一切。注意我的文件是带有制表符分隔符的.txt。
rqqzpn5f3#
实际上你可以使用lightweight stream transformation library called scramjet-直接从http流解析CSV是我的一个主要例子,它也使用PapaParse来解析CSV。
上面所写的所有内容,以及中间的任何转换,都可以在几行代码中完成:
在您自己的示例中,您要将文件保存到磁盘,即使使用PapaParse也不需要这样做。
ddhy6vgd4#
我正在添加这个答案(并将随着我的进展更新它),以防其他人仍在研究这个问题。
看起来以前的用户已经结束了下载文件,然后处理它。这应该是没有必要的,因为爸爸解析应该能够处理读流,它应该可以管道'http' GET到该流。
下面是一个例子,有人讨论我正在尝试做什么,并回落到下载文件,然后解析它:https://forums.meteor.com/t/processing-large-csvs-in-meteor-js-with-papaparse/32705/4
下载文件解决方法
虽然下载然后用Papa Parse解析并不能回答我的问题,但这是我目前唯一的解决方法,其他人可能想使用这种方法。
我的代码下载,然后解析目前看起来像这样:
093gszye5#
Http(s)实际上有一个可读的流作为回调中的参数,所以这里有一个简单的解决方案
dsf9zpds6#
piok6c0g7#
大卫Liao的解决方案对我很有效,我使用本地文件时做了一些调整。他没有提供如何解决节点中的文件访问的示例,如果您在控制台中收到
Error: ENOENT: no such file or directory
消息。为了测试您的实际工作目录并了解您必须将控制台日志的路径指向何处,下面的代码使我更好地了解了文件位置:
console.log(process.cwd()).