提问人:Luke 提问时间:10/27/2022 最后编辑:Luke 更新时间:10/27/2022 访问量:121
将一列从 CSV 合并/移动到另一列 CSV 作为最后一列
Combine/move one column from CSV to another CSV as last column
问:
我有两个 CSV 文件。第一列包含两列(逗号分隔),第二列仅包含一列。
我正在尝试将它们组合在一起并将列从第二个文件作为最后一列移动到第一个文件。
问题:当我运行脚本时,该列转到第一个文件,但不是附加为最后一列,而是完全替换了文件的内容。
file_1.csv
1,13414214
6,13414214
13,13
3,33129
file_2.csv
title_1
title_2
title_3
title_4
组合时,应该看起来像file_1.csv
1,13414214,title_1
6,13414214,title_2
13,13,title_3
3,33129,title_4
这些文件具有相同的行号。
这就是我目前所拥有的
$file = fopen("file_1.csv","w");
$row = 1;
if (($handle = fopen("file_2.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000)) !== FALSE) {
$num = count($data);
$row++;
echo $data[0]. "\n";
fputcsv($file, $data);
}
}
fclose($handle);
fclose($file);
任何帮助都是值得赞赏的。
更新:这是答案的输出
1,13414214
,title_1
6,13414214
,title_2
13,13
,title_3
3,33129
,title_4
答:
1赞
KIKO Software
10/27/2022
#1
为简单起见,我不会尝试写信给 .只需读取 和 ,然后写入 .像这样:file_1
file_1
file_2
file_3
$file1 = file("file_1.csv");
$file2 = file("file_2.csv");
$lines3 = [];
foreach ($file1 as $line1No => $line1) {
$line2 = $file2[$line1No] ?? "";
$lines3[] = trim($line1) . "," . trim($line2);
}
file_put_contents("file_3.csv", implode(PHP_EOL, $lines3));
正如你所看到的,我将这些文件视为简单的文本文件,而不是CVS文件,因为我不需要对其中的数据做任何事情。
请注意,这仅在包含相同行数时才起作用。file_1.csv
file_2.csv
哦,还有:对于非常大的文件,这可能不是最佳方法。那么,逐行阅读它们可能会更好,尽管速度要慢得多。
评论
0赞
Luke
10/27/2022
谢谢。它在合并它们方面正在工作,但输出的外观有点偏离。它可以在同一条线上吗?我已经用当前输出更新了我的问题
0赞
RiggsFolly
10/27/2022
您需要做的就是删除其换行符trim($file2[$line1No];)
0赞
KIKO Software
10/27/2022
@Luke 按照 RiggsFolly 的建议添加了修剪。这有帮助吗?在答案中使用我的代码之前,我应该给它发短信。让我来做吧。
0赞
Luke
10/27/2022
是的,它有帮助。现在一切都在排队。谢谢!(也会用大文件测试它)
0赞
KIKO Software
10/27/2022
是的,确实如此。现在自己测试了。我以为这会消除新行,这显然是一个错误的假设。file()
评论
$row = 0;
file_1
file_1
file_2
file_3