1

我有一个相当大的 csv 文件(17GB),我正在尝试对其进行完整性检查。我写了一个小脚本,看起来像这样:

#!/usr/bin/php
<?php

$f = fopen($argv[1],'r');

$i=0;
while (!feof($f)) {
        $row = fgetcsv($f);
        $i++;
}
print $i."\n";

?>

应该只读取行数并打印出来。此脚本输出:60770881

但如果我这样做wc -l,结果是 60777200。

我的 csv 文件是从 MySQL 生成的:

INTO OUTFILE '/tmp/file.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\n'

所以它不应该有任何未转义的换行符或类似的东西。有谁知道可能出了什么问题?

4

1 回答 1

4

CSV 记录可以跨越多行。如果您在任何值中有回车,则文件中将有多个(2 个或更多)物理行(按 计数wc),但它们将作为一个 CSV 记录使用fgetcsv.

此外,您不需要检查feof($f),因为fgetcsv将在文件结束时返回 FALSE。

于 2012-06-11T14:35:52.160 回答