2

是否可以从 CSV 文件中删除所有空白行?

我正在尝试计算 CSV 文件中的所有行,但想排除在特定列或整行上不包含值的行。

这就是我目前用来计算行数的方法。

$import = file($target_path, FILE_SKIP_EMPTY_LINES);
$num_rows = count($import);
echo $num_rows;

样本:

Jun,Bronse,137 Raven,Princeton,TX,75407,2147088671,Nell@Gmail.Com,1990,CHEVROLET,K1500,,
,,,,,,,,,,,,
,,,,,,,,,,,,
,,,,,,,,,,,,
Nella,Brown,111 Venna St,Princeton,TX,75407,2147177671,lakb@Gmail.Com,1993,CHEVROLET,K1500,,
Jun,Bronse,137 Raven,Princeton,TX,75407,2147088671,Nell@Gmail.Com,1990,CHEVROLET,K1500,,
,,,,,,,,,,,,
Jun,Bronse,137 Raven,Princeton,TX,75407,2147088671,Nell@Gmail.Com,1990,CHEVROLET,K1500,,
4

5 回答 5

11
$lines = file("test.csv", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
$num_rows = count($lines);
foreach ($lines as $line) {
    $csv = str_getcsv($line);
    if (empty($csv[SPECIFIC_COLUMN])) {
        $num_rows--;
    }
}

如果您不想检查特定列,而只是过滤掉所有列都为空的行,请将其更改为:

    if (count(array_filter($csv)) == 0) {
于 2014-01-31T20:21:21.660 回答
3

对于空行:

$lines = file("test.csv", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
$num_rows = count($lines);
foreach ($lines as $line) {
    $csv = str_getcsv($line);
    if (!array_filter($csv)) {
        $num_rows--;
    }
}
于 2014-01-31T20:31:04.730 回答
0
$filename = "test.csv";

if (($fp = fopen($filename, "r")) !== FALSE) { 
    $rows = explode("\n", $fp);
    $csv = "";

    foreach($rows as $r) {
        if(str_replace(array(" ", ","), "", $r) != "")
            $csv .= $r."\n";
    }

    file_put_contents($filename, $csv);;
}
于 2014-01-31T20:17:45.420 回答
0

基本上是 Barmar 已经发布的内容,但是如果您需要处理(许多)大*文件,我建议您尝试rtrim(或ltrim)尝试,因为通常这些对于像您这样的任务来说要快一些:

$lines = file("test.csv", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
$num_rows = count($lines);
foreach ($lines as $line) {
    if (!rtrim($line, ',')) {
        $num_rows--;
    }
}

*我所说的大是指它真的很值得。不要浪费时间进行微优化。

于 2014-02-03T20:53:10.953 回答
-1

使用 notepad++ 打开 .csv 文件。然后搜索^\*sgoto find and replace 并单击全部替换按钮。这应该可以解决您的问题。

于 2018-06-23T09:00:53.253 回答