合并多个CSV文件

时间:2017-10-13 05:30:03

标签: php csv

我正在尝试合并多个CSV文件但无法执行此操作。 请看看我的代码我不知道我的代码有什么问题。 csvfiles 是一个包含多个相同格式文件的目录。

Download Sample CSV Files

我的代码

$csvdir = "./csvfiles/";
$result = fopen('./csvfiles/merge.csv', 'w');
$test="";
if (is_dir($csvdir)) {
    if ($handle = opendir($csvdir)){
        while (($file = readdir($handle)) !== false) {
            if (substr($file, -4) === ".csv") {
                $csvcontent = file_get_contents($file);
                fwrite($result, $csvcontent);
            }
        }
        closedir($handle);
    }
}
fclose($result);

2 个答案:

答案 0 :(得分:1)

一些观察结果:

  • 某些时候opendir($csvdir)还会包含您的merge.csv文件。你想避免这种情况。保持独立。

  • 将文件操作保持在最低限度。对于循环中的每个.csv文件,您都要写入merge.csv。相反,收集要在循环中写入的数据并只写一次。

  • 您在file_get_contents($file);中收到了错误的文件内容。 $file只包含文件名,而不是完整路径。

  • 永远不会使用$test

这是工作代码:

<?php

$csvdir = "./csvfiles/";
$csvcontent = '';
if (is_dir($csvdir)) {
    if ($handle = opendir($csvdir)) {
        while (($file = readdir($handle)) !== false) {
            if (substr($file, -4) === ".csv") {
                $csvcontent .= file_get_contents($csvdir . $file);
            }
        }
        closedir($handle);
    }
}

$result = fopen('./merge.csv', 'w');
fwrite($result, $csvcontent);
fclose($result);

答案 1 :(得分:0)

以下代码确实合并了我的 10 个 CSV 文件,每个文件有 2 列。我希望输出文件有两列,而输出有 20 行;原因是下面的代码将每个 csv 文件放置到 2 个新列。图片还给出了 enter image description here

import os
import glob
import pandas as pd
os.chdir("/home/csv/")
 extension = 'csv'
 all_filenames = [i for i in glob.glob('*.{}'.format(extension))]
 combined_csv = pd.concat([pd.read_csv(f) for f in all_filenames ])
 combined_csv.to_csv( "combined_csv4.csv")
 print('merging done')