Node.js读取Pile语料百万行时输出内容错位问题求助
问题:Node.js读取Pile语料库100万行数据时出现行内容错位
尝试使用Node.js从Pile语料库中正确读写100万行数据,但遇到问题:输出文件虽有100万行,但第100万行却是原文件中约90万行的内容。
初始使用的代码如下:
fs = require("fs"); var buffer = ''; var rs1 = fs.createReadStream('00.jsonl',"ascii"); var ws = fs.createWriteStream('pile_1M.txt', {flags: 'w',encoding: 'ascii'}); var lines_num=0; var max_read=1000000; rs1.on('data', function(chunk) { rs1.pause() var lines = (buffer+chunk).split(/\r?\n/g); for (var i = 0; i < lines.length && lines_num<max_read; ++i) { lines_num++; ws.write(lines[i]+"\n"); } if(lines_num>=max_read){ rs1.close() console.log("close"); } rs1.resume(); }); rs1.on('close', function () { ws.close(); });
编辑补充:
感谢@jfriend00的帮助,我得出了以下可行解决方案:
fs = require("fs"); var buffer = ''; var rs1 = fs.createReadStream('/media/user/hdd2/pile/00.jsonl',"utf-8"); var ws = fs.createWriteStream('pile_1M_2.txt', {flags: 'w',encoding: 'utf-8'}); var lines_num=0; var max_read=100000; function json_line_to_text(line){ var index=line.indexOf(', "meta": {"'); var res=line.substring(10,index-1); if(index==-1){ res=line; } return res; } rs1.on('data', function(chunk) { rs1.pause(); var lines = (buffer+chunk).split(/\r?\n/g); for (var i = 0; i < lines.length && lines_num < max_read; ++i) { if (i == lines.length - 1) { buffer = lines[i]; } else { if (lines_num < max_read) { ws.write(json_line_to_text(lines[i]) + "\n"); lines_num++; } } } if(lines_num>=max_read){ rs1.close(); console.log("close"); } rs1.resume(); }); rs1.on('close', function () { ws.close(); });
说明:我加入了json_line_to_text函数,原本以为它是问题根源,实际并非如此。
内容的提问来源于stack exchange,提问作者user3776738
相关产品推荐
相关产品推荐

