gpt4 book ai didi

php - 合并 2 个 CSV 文件

转载 作者:可可西里 更新时间:2023-11-01 12:25:33 25 4
gpt4 key购买 nike

我正在尝试在 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 并且不想使用太多机器的 RAM(例如,假设每个 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 个 CSV 文件,每个文件约 500,000 行。耗时约 5 秒,使用了 512kb 的内存。

逻辑:

打开每个文件,读取一行,然后将其写入输出文件。是的,写每一行可能比写整个缓冲区要慢,但这允许使用大文件,同时对机器内存温和。在任何时候,您都是安全的,因为脚本一次只在线读取然后写入。

尽情享受吧!

关于php - 合并 2 个 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5417734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com