我正在尝试在
PHP中组合两个CSV文件.我正在寻找完美的方法.到目前为止,这是我的代码:
$one = fopen('data5.csv','r');
$two = fopen('userdata.csv','r');
$final = fopen('final_data.csv','a');
$temp1 = fread($one,filesize("data5.csv"));
$temp2 = fread($two,filesize("userdata.csv"));
fwrite($final,$temp1);
fwrite($final,$temp2);
如果您有大型CVS并且您不想使用机器的大部分内存(例如,每个CSV为1GB),我会给您一个解决方案.
<?PHP
function joinFiles(array $files,$result) {
if(!is_array($files)) {
throw new Exception('`$files` must be an array');
}
$wH = fopen($result,"w+");
foreach($files as $file) {
$fh = fopen($file,"r");
while(!feof($fh)) {
fwrite($wH,fgets($fh));
}
fclose($fh);
unset($fh);
fwrite($wH,"\n"); //usually last line doesn't have a newline
}
fclose($wH);
unset($wH);
}
用法:
<?PHP
joinFiles(array('join1.csv','join2.csv'),'join3.csv');
有趣的事实:
我只是用它来连接2个大约500,000行的CSV文件.花了大约5秒钟,使用了512kb的内存.
逻辑:
打开每个文件,读取一行,然后将其写入输出文件.是的,写入每一行可能比编写整个缓冲区要慢,但这样可以在对机器内存温和的同时使用繁重的文件.
在任何时候,您都是安全的,因为脚本一次只能在线读取然后写入.
请享用!