Tag: csv

Nodejs:parsingCSV和Zip的性能问题

这些文件被提交给我的服务器,我试图确定CSV是否有效,以及从CSV引用的所有图像都存在于zip中。 我必须使用所有这些信息来填充Mongo数据库,但是我想在后台执行此操作,并尽可能快地向客户端发送响应。 所以我有两个可读的stream,我有三种不同的方法: 解压文件需要24秒,所以解压缩csv + fs.exists不是一个选项。 parsing整个csv,保存数组中的文件名,然后使用node-unzip和pipe读取zip需要5秒钟。 读取csv并行读取zip并使用共享数组同时确定文件是否存在,这是最快的选项,需要4秒钟。 有没有人有一个想法如何更快地做到这一点? 编辑 :用于validation的代码是: // lib/validator.js function validateParallel(csv, zip) { const shared = {}; return new Promise((resolve, reject) => { const l = CSV_VALIDATORS.length – 1; csv .pipe(split()) .pipe(through2(validateLine.bind({ zip, reject, n: 0, l, shared }))) .on('finish', () => { zip .pipe(unzip.Parse()) .on('entry', (entry) => { delete shared[entry.path]; […]

通过nodejs和ya-csv将数据添加到预先存在的csv文件

我希望有人可以为我阐明这一点…我不能为我的生活了解如何使用nodejs和ya-csv (模块)将数据追加到预先存在的csv文件。 (在这种情况下称为staff.csv)如果我要运行这个脚本两次csv文件将被覆盖,而不是更新,以同时保存旧信息和新信息。 不要以为任何人有一个体面的手段,可以帮助我或知道一个替代? dictionary = { //data… }; var csv = require('ya-csv'); var w = csv.createCsvFileWriter('staff.csv'); var data = []; for(key in dictionary) { if(typeof dictionary[key] !== 'function'){ data.push(key); data.push(dicitonary[key]); } } w.writeRecord(data);

完成Mongo写入后,节点csv调用挂起

我使用Node来加载CSV文件,然后将其写入MongoDB数据库。 这实际上是工作,但脚本不退出! 这是核心: function commute_process(csvstr, col_commute) { csv() .from(csvstr, {columns: true}) .transform(function(row) { // unimportant stuff return row; }) .on('record', function(row) { cleanedrow = // unimportant console.log(cleanedrow); col_commute.insert(cleanedrow, {w:1}, function(err, result) { assert.equal(null, err); }); }) .on('end', function(count){ console.log('Number of lines: '+count); }); console.log("end of commute_process()") }; csvstr是一个很大的string。 col_commute是一个Mongo集合。 每行的日志输出正常。 end日志按预期发生(5000行)。 数据库具有正确的数据。 而…就是这样。 commute_process()的结束行不会发生。 为什么不?

NodeJS将csv文件下载到缓冲区

我打算下载一个小的CSV,我需要在进程之前将其存储在一个variables: var http = require('http'); var csvData; var request = http.get('http://url', function(response) { response.pipe(csvData); }); request.end(); response.pipe()只适用于文件stream,我如何将我的回应存储到csvData var?

如何通过callback后的服务传递内容到另一个服务控制器已被parsing?

我有一个使用callback函数将内容传递给控制器​​的服务: angular.module('piApp').service("dataRetrievalService", function () { function getContents(callback) { //Converter Class var fs = require("fs"); var Converter = require("csvtojson").Converter; var fileStream = fs.createReadStream("order.csv"); //new converter instance var converter = new Converter({ constructResult: true }); //end_parsed will be emitted once parsing finished converter.on("end_parsed", function (jsonObj) { console.log(jsonObj); //here is your result json object //getResult(jsonObj) callback(jsonObj); }); //read […]

Node js:以编程方式更改csv文件编码并parsing为json

我有一个utf-16编码的csv文件,需要将其转换为utf8并将其转换为JSON。 我正在使用csvtojson和iconv-lite模块。 这是我的代码: var data = fs.createReadStream("myfile.csv"); data.pipe(iconv.decodeStream('utf16')) .pipe(iconv.encodeStream('utf8')) .pipe(fs.createWriteStream("encoded.csv")); var Converter = require("csvtojson").Converter; var csvStr = fs.readFileSync("encoded.csv").toString(); var converter = new Converter({}); converter.fromString(csvStr, function(err, jsonObj) { if (err) { handleError(err) } console.log(jsonObj) }); 问题是iconv用正确的编码转换csv文件,但是当我读这个文件并调用toString()方法时,它返回一个空string。 我怎样才能解决这个问题?

在NodeJS中结束之前closuresHttp响应stream

我正在使用nodejs中的请求模块发出请求,我正在收到stream式响应。 这个响应stream被传送到csvparsing器并将logging填充到一个数组中。 一旦我得到预设的logging数,我想结束csvparsing并closures响应stream。 如何正确清理响应stream 这是伪代码 var stream = request.get(url); stream.pipe(csvParser); var count = 15; csvParser.on("readable",function(){ while(record = csvParser.read()){ if(records.length<count){ records.push(record); } else { csvParser.end(); //stream.close(); //stream.unpipe(); // stream.destroy(); } } }); csvParser.on("error",function(err){ console.log("Error",err.message); }) csvParser.on("finish",function(){ //console.log("records",records); console.log("done"); }) 当我尝试stream.close(),这是说未定义的方法。 什么是清理它的正确方法..?

在MongoDB中存储类似JSON的数据

我使用的是MongoDB,因为meteor不支持其他任何东西。 主要目标是上传CSV文件,在Meteor中parsing它们并将数据导入数据库。 插入的数据大小可以是50-60GB或者每个文件可能更多,但是由于文档大小的限制,我甚至不能插入大于16MB的东西。 而且,即使插入的1/10也需要很长时间。 我正在使用CollectionFS在客户端上传CSV文件。 因此,我也尝试使用CollectionFS作为数据本身,但它给了我一个“不受支持的数据”的错误。 我能做些什么呢? 编辑:由于我的问题造成了一个关于存储数据技术的困惑,我想清除一些东西:我没有兴趣上传CSV文件; 我有兴趣将数据存储在文件中。 我想收集所有用户的数据在一个地方,我想获取资源最低的数据。

如何使用节点js将新列添加到csv文件

我已经尝试过使用node.js npm包fast-csv,但我没有得到解决scheme,我可以成功读取csv文件,现在我需要添加一个新的列到我现有的csv文件。 我的问题: 如何添加新列csv文件? 如何更新csv? var csv = require("fast-csv"); var fs = require('fs'); var stream = fs.createReadStream("file1.csv"); var service = 'https://maps.googleapis.com/maps/api/distancematrix/json?origins=53.78943,-0.9985&destinations=53.540867,-0.510699&mode=driving&language=en-US'; var source = []; var dest = []; var distance = require('google-distance'); //distance.apiKey = 'AIzaSyButrP5ZsbtQYOoM_Fd55QPceAXjUKMqg8'; distance.apiKey = 'AIzaSyCgOnxMh3tg20zFpMf00FSNdexm64oxS_4'; var i = 1; csv .fromStream(stream, { headers: true }) .on("data", function(data) { //get source and […]

每5分钟使用NodeJS将1000个数据中的10个数据添加/插入到MongoDB中

我目前正在尝试每5分钟插入10个新数据 ,而我目前在我的csv文件中有1000个数据 。 我怎么能这样做? 帮助将不胜感激 以下是appendMongo.js代码 var fs= require('fs'); var csv = require('fast-csv'); var mongodb = require('mongodb'); var url = 'mongodb://localhost:27017/insertDB'; var MongoClient = mongodb.MongoClient; var data; MongoClient.connect(url, function (err, db) { if (err) { console.log('Unable to connect to the mongoDB server. Error:', err); } else { console.log('Connection established to', url); var collection = db.collection('airports'); […]