【发布时间】:2019-11-24 04:04:45
【问题描述】:
我有一个大小 > 10GB 的 csv 文件,需要在每个页面上显示 100 行并进行分页。
我正在使用带有 SED 的 PHP 来获取 100 行文件,如下所示
sed -n '16224,16482p;16483q' filename > newfile
在 PHP 中,我执行如下 SED 命令来获取行范围
$res="sed -n '".$starting.",".$stateEnd."p;".$exitState."q' common.csv > newfile.csv 2>error.log";
$output_result = shell_exec($res);
但这需要很长时间才能从文件中获取 100 行的范围。
有没有更好的方法、快速的阅读方法来获取任何这些语言中的一系列行,例如 JAVA、PHP 或 PYTHON 或 SHELL SCRIPT 或 Linux 命令。
有人可以举个例子吗
【问题讨论】:
-
您意识到,为了读取 100 行的任意块,您必须读取它们之前的所有内容(以便找到那 100 行),所以会有对可以加速多少有一个相当严格的限制。
-
如果您最有可能逐块显示 - 最好在 PHP 中阅读它(使用
fopen()等)并记住您阅读的位置(使用ftell()) ,然后下次使用fseek()跳转到您上次中断的开始处。 -
@ScottHunter 是的,同意你的观点,但会有一些我不知道的语言选项:(
-
假设它是简单的 csv 数据,没有包含嵌入换行符的字段...split 派上用场。
-
基本上问题在于 CSV 文件不是保存您实际想要处理的 10Gig 数据的最佳方式。快速/明智地。您是否考虑过使用 CSV 构建数据库表。这将使其更加灵活