PHP按行读取、处理较大CSV文件的代码实例


Posted in PHP onApril 09, 2014

对于数百万条数据量的CSV文件,文件大小可能达到数百M,如果简单读取的话很可能出现超时或者卡死的现象。

为了成功将CSV文件里的数据导入数据库,分批处理是非常必要的。

下面这个函数是读取CSV文件中指定的某几行数据:

/**
 * csv_get_lines 读取CSV文件中的某几行数据
 * @param $csvfile csv文件路径
 * @param $lines 读取行数
 * @param $offset 起始行数
 * @return array
 * */
function csv_get_lines($csvfile, $lines, $offset = 0) {
    if(!$fp = fopen($csvfile, 'r')) {
     return false;
    }
    $i = $j = 0;
 while (false !== ($line = fgets($fp))) {
  if($i++ < $offset) {
   continue; 
  }
  break;
 }
 $data = array();
 while(($j++ < $lines) && !feof($fp)) {
  $data[] = fgetcsv($fp);
 }
 fclose($fp);
    return $data;
}

调用方法:
$data = csv_get_lines('path/bigfile.csv', 10, 2000000);
print_r($data);

函数主要采用行定位的思路,通过跳过起始行数来实现文件指针定位。

上述函数对500M以内的文件进行过测试,运行通畅,对于更大的文件未做测试,请斟酌使用或加以改进。

PHP 相关文章推荐
PHP4之真OO
Oct 09 PHP
使用 php4 加速 web 传输
Oct 09 PHP
使用 eAccelerator加速PHP代码的目的
Mar 16 PHP
Ping服务的php实现方法,让网站快速被收录
Feb 04 PHP
php判断字符串在另一个字符串位置的方法
Feb 27 PHP
php数组合并的二种方法
Mar 21 PHP
PHP中提问频率最高的11个面试题和答案
Sep 02 PHP
PHP中echo,print_r与var_dump区别分析
Sep 29 PHP
PHP SOCKET编程详解
May 22 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
May 27 PHP
PHP实现git部署的方法教程
Dec 19 PHP
Laravel5.1 框架路由基础详解
Jan 04 PHP
PHP二维数组排序的3种方法和自定义函数分享
Apr 09 #PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
Apr 09 #PHP
PHP扩展模块Pecl、Pear以及Perl的区别
Apr 09 #PHP
排序算法之PHP版快速排序、冒泡排序
Apr 09 #PHP
PHP读取大文件的类SplFileObject使用介绍
Apr 09 #PHP
php解决约瑟夫环示例
Apr 09 #PHP
适用于抽奖程序、随机广告的PHP概率算法实例
Apr 09 #PHP
You might like
php文件操作之小型留言本实例
2015/06/20 PHP
php获得文件夹下所有文件的递归算法的简单实例
2016/11/01 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
setAttribute 与 class冲突解决
2008/02/17 Javascript
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
js实现的日期操作类DateTime函数代码
2010/03/16 Javascript
jquery 插件学习(六)
2012/08/06 Javascript
jquery实现带复选框的表格行选中删除时高亮显示
2013/08/01 Javascript
Knockoutjs 学习系列(二)花式捆绑
2016/06/07 Javascript
js中获取时间new Date()的全面介绍
2016/06/20 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
微信小程序实现侧边栏分类
2019/10/21 Javascript
JS 设计模式之:工厂模式定义与实现方法浅析
2020/05/06 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
基于python批量处理dat文件及科学计算方法详解
2018/05/08 Python
PyCharm代码回滚,恢复历史版本的解决方法
2018/10/22 Python
对pandas中两种数据类型Series和DataFrame的区别详解
2018/11/12 Python
Python检查ping终端的方法
2019/01/26 Python
python3字符串操作总结
2019/07/24 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
2020/02/21 Python
解决Python数据可视化中文部分显示方块问题
2020/05/16 Python
用python获取txt文件中关键字的数量
2020/12/24 Python
单位刻章介绍信范文
2014/01/11 职场文书
师范生求职自荐信
2014/06/14 职场文书
会计求职自荐信
2014/06/20 职场文书
考试保密承诺书
2014/08/30 职场文书
幼师小班个人总结
2015/02/12 职场文书
2015高三毕业寄语赠言
2015/02/27 职场文书
上诉答辩状范文
2015/05/22 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书
Mysql数据库按时间点恢复实战记录
2021/06/30 MySQL
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/06 PostgreSQL