我正在尝试合并多个CSV文件但无法执行此操作。 请看看我的代码我不知道我的代码有什么问题。 csvfiles 是一个包含多个相同格式文件的目录。
我的代码
$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);
答案 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 个新列。图片还给出了 :
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')