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 相关文章推荐
在PHP的图形函数中显示汉字
Oct 09 PHP
E路文章系统PHP
Dec 11 PHP
[原创]PHP中通过ADODB库实现调用Access数据库之修正版本
Dec 31 PHP
PHP中几个常用的魔术常量
Feb 23 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
May 08 PHP
php实现用手机关闭计算机(电脑)的方法
Apr 22 PHP
php遍历树的常用方法汇总
Jun 18 PHP
php curl模拟post请求和提交多维数组的示例代码
Nov 19 PHP
PHP中读取文件的几个方法总结(推荐)
Jun 03 PHP
php curl 模拟登录并获取数据实例详解
Dec 22 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
Jan 27 PHP
使用PHP开发留言板功能
Nov 19 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安装memcached扩展笔记
2015/05/28 PHP
基于PHP制作验证码
2016/10/12 PHP
PHP Cli 模式设置进程名称的方法
2019/06/12 PHP
asp.net和php的区别点总结
2019/10/10 PHP
JQUERY复选框CHECKBOX全选,取消全选
2008/08/30 Javascript
Javascript 面向对象之重载
2010/05/04 Javascript
精选的10款用于构建良好易用性网站的jQuery插件
2011/01/23 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
2013/09/15 Javascript
jQuery实现点击文本框弹出热门标签的提示效果
2013/11/17 Javascript
php is_numberic函数造成的SQL注入漏洞
2014/03/10 Javascript
完美兼容各大浏览器获取HTTP_REFERER方法总结
2014/06/24 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
jquery mobile开发常见问题分析
2016/01/21 Javascript
AngularJS上拉加载问题解决方法
2016/05/23 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
深入学习python的yield和generator
2016/03/10 Python
K-近邻算法的python实现代码分享
2017/12/09 Python
Python绘制正余弦函数图像的方法
2018/08/28 Python
Python中Numpy mat的使用详解
2019/05/24 Python
python跳出双层for循环的解决方法
2019/06/24 Python
使用OpenCV实现仿射变换—旋转功能
2019/08/29 Python
python实现读取类别频数数据画水平条形图案例
2020/04/24 Python
python中使用.py配置文件的方法详解
2020/11/23 Python
Python编写万花尺图案实例
2021/01/03 Python
基于 HTML5 的 WebGL 3D 版俄罗斯方块的示例代码
2018/05/28 HTML / CSS
美国杂志订阅折扣与优惠网站:Magazines.com
2016/08/31 全球购物
AJAX的优缺点都有什么
2015/08/18 面试题
银行主办会计岗位职责
2014/08/13 职场文书
优秀团员个人总结
2015/02/26 职场文书
跳高加油稿
2015/07/21 职场文书
python程序的组织结构详解
2021/12/06 Python