我正在尝试一次读取一行大文件。我在Quora上发现了一个与该主题有关的问题,但我缺少一些联系以使整个组件组合在一起。
var Lazy=require("lazy");
new Lazy(process.stdin)
.lines
.forEach(
function(line) {
console.log(line.toString());
}
);
process.stdin.resume();
我想弄清楚的一点是,如何一次从文件而不是如本示例中的STDIN读取一行。
我试过了:
fs.open('./VeryBigFile.csv', 'r', '0666', Process);
function Process(err, fd) {
if (err) throw err;
// DO lazy read
}
但它不起作用。我知道,在紧急情况下,我可能会转而使用PHP之类的东西,但是我想弄清楚这一点。
我不认为其他答案会起作用,因为该文件比我在其上运行的具有内存的服务器大得多。
从Node.js v0.12和Node.jsv4.0.0开始,有一个稳定的readline核心模块。这是从文件中读取行的最简单方法,而无需任何外部模块:
const fs = require('fs');
const readline = require('readline');
async function processLineByLine() {
const fileStream = fs.createReadStream('input.txt');
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
// Note: we use the crlfDelay option to recognize all instances of CR LF
// ('\r\n') in input.txt as a single line break.
for await (const line of rl) {
// Each line in input.txt will be successively available here as `line`.
console.log(`Line from file: ${line}`);
}
}
processLineByLine();
或者:
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream('file.in')
});
lineReader.on('line', function (line) {
console.log('Line from file:', line);
});
即使没有final,也可以正确读取最后一行(从Node v0.12或更高版本开始)\n
。
更新
:此示例已添加到Node的API官方文档中。
字符串表[]=新字符串[100];
问题内容: 我需要一次最多读取N行来读取一个大文件,直到EOF。在Python中最有效的方法是什么?就像是: 问题答案: 一种解决方案是列表理解和分片运算符: 在这之后是行的元组。但是,这会将整个文件加载到内存中。如果您不希望这样做(即文件可能真的很大),则可以使用生成器表达式和itertools包中的另一种解决方案: 是一个生成器对象,它为您提供文件的每一行,并且可以在这样的循环中使用: 两种解
问题内容: 我正在尝试在Python中多次读取某些文件的行。 我正在使用这种基本方式: 一切正常,但是如果我想在文件仍处于打开状态的情况下每行第二次进行迭代,例如: 然后它不起作用,我需要打开,然后关闭,然后再次打开我的文件以使其正常工作。 感谢您的回答! 问题答案: 使用file.seek()跳到文件中的特定位置。但是,请考虑是否真的有必要再次浏览该文件。也许有更好的选择。
问题内容: 是否有比从Python中的文件一次读取第二行更好的方法呢? 我在2.5.4中。较新版本有何不同? 编辑:删除的答案指出:在py3k中,您需要执行next(f)而不是f.next()。更不用说打印更改 问题答案: import itertools las,需要Python 2.6或更高版本;2.5仅具有,如果有奇数行,它将截断最后一行。当然,提供与生成器相同的功能非常容易。 这是一个更一
问题内容: 我想将文件读入Java的String中,一次x个字符。然后,我将对字符串进行某些操作,并希望从我中断的地方继续。我该怎么办? 编辑: 目标文件是一个简单的文本文件。 问题答案: 好吧,首先您需要区分 字节 和 字符 。您可以一次从一定数量的字节中读取(作为最大数量;不能保证您将获得所需的所有字节),并且一次可以读取多个字符(再次,最大)。 听起来您 可能 想要在周围使用,指定适当的字符