为啥使用 php 从一个非常大的 csv 文件中只读取 1000 条记录?

Posted

技术标签:

【中文标题】为啥使用 php 从一个非常大的 csv 文件中只读取 1000 条记录?【英文标题】:why only 1000 records are read from a very large csv file using php?为什么使用 php 从一个非常大的 csv 文件中只读取 1000 条记录? 【发布时间】:2015-08-08 22:20:14 【问题描述】:

我只是在学习使用 php,因为我的工作提出了要求,我试图弄清楚为什么在我的 CSV 文件中的 124938 条记录中只有 1011 条记录被读取。这是我正在使用的非常基本的代码。

<?php
print "<table>\n";
$fp = fopen('STDPRICE_FULL.csv','r') or die("can't open file");
while($csv_line = fgetcsv($fp,1024)) 
  print '<tr>';
  for ($i = 0, $j = count($csv_line); $i < $j; $i++) 
    print '<td>'.$csv_line[$i].'</td>';
  
  print "</tr>\n";
 
print '</table>\n';
fclose($fp) or die("can't close file");
?>

当我打印 count($csv_line) 时,它只显示 1011 条记录。 现在我相信它可能与整数的大小有关,但我不确定。 另外,我搜索了增加整数大小的方法,但 PHP 似乎可以自己处理类型转换。 谁能建议我可以做些什么来读取 CSV 文件中的所有行?

【问题讨论】:

这可能是某种内存问题,因为这些记录很多。你的 php 内存限制和脚本执行时间是多少? $j = count($csv_line); --- 这是什么?比如,你为什么认为它是许多行/记录? fgetcsv($fp,1024) 更改为 fgetcsv($fp)。通常,您不想设置第二个参数,除非您的文件中有常规的、预期的(最大)宽度行 我的 php.ini 文件有以下 max_input_vars = 6000 max_execution_time = 5000 memory_limit = 256M 好吧,“更简单”的做法是将最后一项输出与文件中的最后一项进行比较。它们匹配吗? Photoshop Extended ALL IE ALL 300 000 plus Gold 2Y 24 Months PRO 这是我在您的页面上最后关闭 &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt; 之前看到的最后一件事。这是你文件中的最后一件事吗? 【参考方案1】:

使用http://dev.mysql.com/doc/refman/5.1/en/load-data.html

然后使用数据库。

【讨论】:

【参考方案2】:

使用 ParseCSV 类。我们已经成功地用于处理非常大的文件。

ParseCSV Class at GitHub

它处理了我们在 PHP 中处理 CSV 文件时遇到的许多问题。

【讨论】:

以上是关于为啥使用 php 从一个非常大的 csv 文件中只读取 1000 条记录?的主要内容,如果未能解决你的问题,请参考以下文章

一种将数据从非常大的 csv 写入 SQL 数据库的方法

使用 Python 或 R 将非常大的 sql 文件导出到 csv

访问非常大的 csv 文件都有哪些不同的方法?

从巨大的 CSV 文件中读取随机行

重命名非常大的 CSV 数据文件的列 [重复]

从 GCS 获取海量 csv 文件到 BQ