当前位置: 首页 > 面试题库 >

有效地计算文本文件的行数。(200mb +)

鄢英毅
2023-03-14
问题内容

我刚刚发现我的脚本给了我一个致命错误:

Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 440 bytes) in C:\process_txt.php on line 109

那行是这样的:

$lines = count(file($path)) - 1;

因此,我认为将文件加载到内存中并计算行数有困难,是否有更有效的方法可以在没有内存问题的情况下执行此操作?

我需要计算行数从2MB到500MB的文本文件。有时候也许是演出。

谢谢大家的帮助。


问题答案:

这将使用较少的内存,因为它不会将整个文件加载到内存中:

$file="largefile.txt";
$linecount = 0;
$handle = fopen($file, "r");
while(!feof($handle)){
  $line = fgets($handle);
  $linecount++;
}

fclose($handle);

echo $linecount;

fgets将一行加载到内存中(如果$length省略第二个参数,它将继续从流中读取数据,直到到达行尾为止,这就是我们想要的)。如果您关心墙壁时间和内存使用情况,这仍然不太可能像使用PHP之外的其他工具一样快。

唯一的危险是,如果任何行特别长(如果遇到2GB的文件而没有换行怎么办?)。在这种情况下,最好将其分成几大块,然后计算行尾字符:

$file="largefile.txt";
$linecount = 0;
$handle = fopen($file, "r");
while(!feof($handle)){
  $line = fgets($handle, 4096);
  $linecount = $linecount + substr_count($line, PHP_EOL);
}

fclose($handle);

echo $linecount;


 类似资料:
  • 本文向大家介绍python计算文本文件行数的方法,包括了python计算文本文件行数的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python计算文本文件行数的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Python程序设计有所帮助。

  • 本文向大家介绍使用Java计算文本文件中的行数,包括了使用Java计算文本文件中的行数的使用技巧和注意事项,需要的朋友参考一下 我们可以使用Java的BufferedReader类读取文件中的行。请参阅下面的示例- 示例 在类路径中请看以下文本文件。 test.txt 测试器 这将产生以下结果- 输出结果

  • 问题内容: 我需要计算大文件(或其一部分)的SHA-256哈希。我的实现工作正常,但比C 的CryptoPP计算要慢得多(25分钟vs. 30 GB文件的10分钟)。我需要的是在C 和Java中执行时间相似,因此散列几乎可以同时准备好。我也尝试了Bouncy Castle的实现,但是它给了我相同的结果。这是我如何计算哈希值: 问题答案: 我的解释可能无法解决您的问题,因为它很大程度上取决于您的实际

  • 问题内容: 我通常使用大约20 Gb大小的文本文件,并且发现自己经常对给定文件中的行数进行计数。 我现在做的只是,而且需要很长时间。有什么解决方案会更快吗? 我在安装了Hadoop的高性能集群中工作。我想知道地图缩小方法是否可以提供帮助。 我希望解决方案像解决方案一样简单,只需一条生产线,但不确定其可行性。 有任何想法吗? 问题答案: 尝试: 猫也是不必要的:用您现在的方式就足够了。

  • 问题内容: 我有大型文本文件,范围在和之间。如何使用来计算文件中的行数? 我有这些限制: 整个文件不需要写入内存 不需要子进程来执行任务 问题答案: 不使用wc的解决方案: 速度较慢,但​​您可能没有想到的那么多-140M +文件的传输时间为0.6秒,包括node.js加载和启动时间

  • 问题内容: 我正在研究 “使用信息获取,PCA和遗传算法的文本分类”, 但是在对文档执行 预处理 (词干,停用词删除,TFIDF)后,m困惑了如何继续进行信息获取部分。 我的 out文件 包含 word, 并且有 TFIDF 值。 像 WORD-TFIDF VALUE 在一起(单词)-0.235(tfidf值) come(word)-0.2548(tfidf值) 当使用weka进行信息获取(“ I