问题
Is it possible to remove all blank ROWS from a CSV file?
I'm trying to count all rows from a CSV file but would like to exclude lines that doesn't contain a value on a specific column or the whole row.
This is what I'm using to count the rows as of the moment.
$import = file($target_path, FILE_SKIP_EMPTY_LINES);
$num_rows = count($import);
echo $num_rows;
sample:
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,,
回答1:
$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 you don't want to check a specific column, but just filter out rows where all columns are empty, change it to:
if (count(array_filter($csv)) == 0) {
回答2:
For empty rows:
$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--;
}
}
回答3:
$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);;
}
回答4:
Basically what Barmar already posted, but if you need to process (many) large* files, I'd recommend to give rtrim
(or ltrim
) a try, since usually those are a bit faster for a task like yours:
$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--;
}
}
*By large I mean that large that it's really worth it. Don't waste your time doing micro-optimizations.
回答5:
use notepad++ to open .csv file. Then search for ^\*s
goto find and replace and click replace all button. This should solve your problem.
来源:https://stackoverflow.com/questions/21489237/remove-blank-rows-from-csv-files-in-php