我想用PHP合并两个大的CSV文件。这些文件太大了,甚至无法一次全部放入内存。在伪代码中,我可以想到这样的东西:
for i in file1
file3.write(file1.line(i) + ',' + file2.line(i))
end
但是,当我使用fgetcsv
遍历文件时,如果不先将整个文件加载到内存中,就不太清楚如何从某个文件中获取n
行。
有什么想法吗?
编辑:我忘了提到,这两个文件中的每个文件都有相同的行数,并且它们具有一对一的关系。也就是说,file1中的62,324行与file2中的62,324行相同。
发布于 2011-01-20 05:44:37
我不确定您使用的是什么操作系统,但是如果您使用的是Linux,那么使用paste
命令可能比尝试在PHP中执行此操作容易得多。
如果这是一个可行的解决方案,并且您完全不需要在PHP中执行此操作,则可以尝试以下操作:
paste -d ',' file1 file2 > combined_file
发布于 2011-01-20 05:38:30
看一下fgets
函数。您可以读取每个文件的一行,对其进行处理,然后将其写入新文件,然后转到下一行,直到到达文件的末尾。
PHP: fgets
具体来看手册中标题为PHP #1逐行读取文件的示例。注意fgets
函数的返回值也很重要。
返回从handle指向的文件中读取的最大长度为1字节的字符串。如果在文件指针中没有要读取的数据,则返回FALSE。
因此,如果它没有返回、FALSE、,那么您就知道还有更多的行要处理。
发布于 2011-01-20 05:39:55
您可以使用fgets()
。
$file1 = fopen('file1.txt', 'r');
$file2 = fopen('file2.txt', 'r');
$merged = fopen('merged.txt', 'w');
while (
($line1 = fgets($file1)) !== false
&& ($line2 = fgets($file2)) !== false) {
fwrite($merged, $line1 . ',' . $line2);
}
fgets()
从文件中读取一行。如您所见,这段代码同时在两个文件上使用它,将合并后的行写到第三个文件。这里的手册是:
http://php.net/fgets
http://php.net/fopen
http://php.net/fwrite
https://stackoverflow.com/questions/4740957
复制相似问题