我正在尝试在
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),我会给您一个解决方案.
原文链接:https://www.f2er.com/php/139059.html<?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的内存.
逻辑:
打开每个文件,读取一行,然后将其写入输出文件.是的,写入每一行可能比编写整个缓冲区要慢,但这样可以在对机器内存温和的同时使用繁重的文件.
在任何时候,您都是安全的,因为脚本一次只能在线读取然后写入.
请享用!