我有n个csv文件,我需要对其进行比较并在之后进行修改。 问题是每个csv文件都有大约800.000行。将多个非常大的csv文件相互比较
要阅读csv文件,我使用fgetcsv,它的效果很好。获得一些记忆力,但最终它足够快。但是,如果我试图比较阵列彼此,它需要年龄。
另一个问题是,我必须使用foreach才能使用fgetcsv获取csv数据,因为有n个文件。我最终得到了一个超大数组,并且无法与array_diff进行比较。所以我需要将它与嵌套的foreach循环进行比较,并且需要很长时间。
代码段为更好地理解:
foreach($files as $value) {
$data[] = $csv->read($value['path']);
}
我的CSV类使用fgetcsv到输出添加到阵列:
fgetcsv($this->_fh, $this->_lengthToRead, $this->_delimiter, $this->_enclosure)
所有的CSV文件中的每一个数据都存储在$数据阵列。这可能是仅使用一个数组的第一个大错误,但我不知道如何在不使用foreach的情况下保持对文件的灵活性。我试图使用灵活的变量名称,但我stucked在那里:)
现在我有这个大阵。通常,如果我尝试比较两个值,并确定文件2中的数据是否存在于文件2中等等,我使用array_diff或array_intersect。但在这种情况下,我只有这一个大阵。正如我所说的,对其进行陈述需要很长时间。
也只有3个文件后,我有一个数组3 * 800.000条目。我猜最新的10个文件后,我的记忆会爆炸。
那么有什么更好的方法来使用PHP来比较n个非常大的csv文件的数量?
它是否必须是PHP?也许有一个命令行工具可以做到这一点?你如何准确地比较文件? –
我是1980年的程序员 - 然后我们通过使用排序,然后一些逻辑来比较,然后结果第三个文件来解决它。有时候你会把工作分散到更小的块中 - 然后连续运行它们。 这不是一个解决方案,而是一种思考方式... – Mike
将所有文件存储在一个数组中的要点是什么? –