用PHP合并两个大型CSV文件
我想用PHP合并两个大的CSV文件。这些文件太大,甚至不能一次全部放入内存。在伪代码中,我可以想到如下内容:用PHP合并两个大型CSV文件,php,csv,Php,Csv,我想用PHP合并两个大的CSV文件。这些文件太大,甚至不能一次全部放入内存。在伪代码中,我可以想到如下内容: for i in file1 file3.write(file1.line(i) + ',' + file2.line(i)) end 但是,当我使用fgetcsv循环浏览一个文件时,我并不清楚如何在不首先将整个内容加载到内存的情况下从某个文件中获取行n 有什么想法吗 编辑:我忘了提到这两个文件都有相同的行数,并且它们有一对一的关系。也就是说,文件1中的第62324行与文件2中的第
for i in file1
file3.write(file1.line(i) + ',' + file2.line(i))
end
但是,当我使用fgetcsv
循环浏览一个文件时,我并不清楚如何在不首先将整个内容加载到内存的情况下从某个文件中获取行n
有什么想法吗
编辑:我忘了提到这两个文件都有相同的行数,并且它们有一对一的关系。也就是说,文件1中的第62324行与文件2中的第62324行一致。我认为解决方案是映射每一行的第一行开始(如果需要,还有某种键),然后使用fread和fwrite创建一个新的csv(我们现在知道每一行的开始和结束,所以我们只需要查找和读取)
另一种方法是将其放入MySQL(如果可能的话),然后返回到新的CSV查看
fgets
函数。您可以读取每个文件的一行,处理它们,然后将它们写入新文件,然后继续下一行,直到到达文件末尾
具体来看PHP手册中标题为example#1逐行读取文件的示例。注意fgets
函数的返回值也很重要
返回长度不超过-1的字符串
从指向的文件读取的字节数
手柄如果没有更多的数据
读入文件指针,然后FALSE
他回来了
因此,如果它没有返回FALSE您就知道还有更多行要处理。尝试使用一次从每个文件中读取一行。您可以使用fgets()
fgets()
从文件中读取一行。如您所见,这段代码同时在两个文件上使用它,将合并的行写入第三个文件。手册如下:
不确定您使用的是什么操作系统,但如果您使用的是Linux,那么使用该命令可能比在PHP中执行此操作容易得多 如果这是一个可行的解决方案,并且您不一定需要在PHP中执行,那么您可以尝试以下方法:
paste -d ',' file1 file2 > combined_file
是 啊令人惊叹的!我喜欢这样的解决方案。我试过了,它成功了。
paste -d ',' file1 file2 > combined_file